【问题标题】:HTML SMS message body. Everything after & symbol disappearsHTML SMS 消息正文。 & 符号之后的所有内容都消失了
【发布时间】:2013-10-02 02:02:27
【问题描述】:

我目前正在开发一个网络应用程序,我必须在这部分代码中预先填充短信框中的消息。所以我的代码如下所示:

    <a href="sms:?body=This is the message with & symbol">SMS</a>

在预填充的消息中,从 & 符号开始的所有内容都不会出现在手机的消息框中。我知道我必须对其进行编码,但我不知道编码代码是什么。有什么解决办法吗?谢谢。

【问题讨论】:

  • 即使在 2017 年,这仍然是个问题。我认为这个问题并没有引起太多关注,因为它相当晦涩。我感觉没有多少人像这样使用sms: 协议生成链接。你有没有找到解决办法?我们最终只是不允许在短信正文中使用&amp; 符号。

标签: android html sms


【解决方案1】:

Android 和 iOS 对语法的响应略有不同。要将&amp; 放入正文中,iOS 需要进行 URL 编码。对于Android,它需要@Crisman 的answer 中提到的双重编码。检查以下代码:

<a href="sms:&body=hi%26bye">iOS</a>
<br>
<a href="sms:?body=hello%2520%2526%2520stuff">double uri component encoded (works fine)</a>

第一个链接适用于 iOS,第二个链接适用于 Android。 注意两个 URL 的语法。 &amp;? 用这个他们与&amp; ios 区分数字和正文部分,而? 用于分隔数字和正文。

一个带数字的例子是这样的

<a href="sms:123456&body=hi%26bye">iOS</a>
<br>
<a href="sms:123456?body=hello%2520%2526%2520stuff">double uri component encoded (works fine)</a>

你也可以试试这个fiddle

【讨论】:

  • 不幸的是最新的Android需要单编码,双编码不起作用:-(
  • @MarkProbst 我已经在基于 Android Pie 的 Android 手机上测试了双重编码,它工作正常。型号是小米红米6 pro
  • @MarkProbst 你在说什么安卓版本?
【解决方案2】:

你试过这个字符\u0026吗?

<a href="sms:?body=This is the message with \u0026 symbol">SMS</a>

引用自 - https://stackoverflow.com/a/3705601/10989990

编辑

有些浏览器会接受&amp;,有些浏览器不接受这个字符,所以&amp;之后的所有内容都将被视为查询参数

编辑

可能是javascript帮助使用

<!DOCTYPE html>
<html>
<body>
<script>
var txt = "SMS";
document.write("<p>" + txt.link("sms:?body=This is the message with & symbol") + "</p>");

</script>
</body>
</html>

祝你好运:)

【讨论】:

    【解决方案3】:

    这看起来很疯狂,但是对身体进行两次编码就可以了。

    <a href="sms:?body=hello & stuff">not encoded (doesn't work)</a>
    <a href="sms:?body=hello%20%26%20stuff">uri component encoded (doesn't work)</a>
    <a href="sms:?body=hello%2520%2526%2520stuff">double uri component encoded (works fine)</a>
    

    在安卓设备上测试的工作小提琴:https://jsfiddle.net/k96g2h48/

    【讨论】:

    • 不幸的是,双重编码会使正文在 iOS 上显示为已编码。
    【解决方案4】:

    编码你的 & 字符,因为它在 URL 中具有特殊含义(它是字段的分隔符)

    <a href="sms:?body=This+is+the+message+with+%26+symbol">SMS</a>
    

    如果你只是想要文本表示,URL中具有特殊含义的字符需要是ecnode。

    wikipedia on percent encoding

    【讨论】:

    • 我试过了,从 & 符号开始的消息仍然丢失。
    • 您在哪个浏览器上尝试这个?我在 win2k8 上的 Opera 中使用 Outlook 作为客户端(使用 mailto:?body=bar%26foo)验证了这一点,并且有效
    • 我正在用手机通过安卓浏览器进入网页应用
    • 你确定链接没有被双重编码吗?我没有安卓手机,但你能做一些类似查看源代码的事情来验证 html 看起来像你期望的那样吗?
    【解决方案5】:

    我认为你需要像下面这样写

      <a href="sms:?body=This is the message with &amp; symbol">SMS</a>
    

    【讨论】:

    • 我试过了,还是和上面提到的一样。
    【解决方案6】:

    尝试使用&amp;#38; 代替“&”,因为这是字符的 ASCII 版本,用于在 HTML 文档中显示为文本

    【讨论】:

    • 我刚试过这个,但仍然得到相同的结果。从 & 符号开始的任何消息都会消失。
    猜你喜欢
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 2021-12-30
    相关资源
    最近更新 更多