如何处理'&'在从iPhone Mail.app发送为HTML的URL中

时间:2010-01-21 08:24:41

标签: iphone cocoa-touch nsstring url-encoding

道歉,如果已经回答了这个问题。有类似的主题,但我没有找到与Cocoa& amp; NSString的...

我正在构建一个可点击的网址,以嵌入要通过iPhone上的MFMailComposeViewController发送的HTML电子邮件。我创建了网址然后使用stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding来润滑空白等,然后添加一些周围的HTML来获取:

<a href = "http://www.site.com/viewitem?name=Johnny%20Rotten&age=53&mate=sid%20vicious">view</a>

一切都很好,所以它被附加到emailBody。但是,一旦[mailComposer setMessageBody:emailBody isHTML:YES] & &amp;变为&amp;,我的网址中的&就不合理了。

我可以控制这个吗?有更好的编码算法吗?我的HTML有点生疏也许我使用了错误的编码?我确信在服务器上我可以将{{1}}解析回{{1}}但是寻找可可方式......

谢谢!

2 个答案:

答案 0 :(得分:2)

实际上,&amp;应始终在HTML属性中编码为&amp;。包括链接。包括表单值分隔符。所以它完全符合你的要求,即使你不知道你想要它。

以这种方式看待:在您的网址中,您有&age=53..。这首先被解释为一个字符实体,只有在它不起作用之后它被解释为一个&符号,后面跟着更多的字符数据。

W3C spec对此很清楚:

  

作者应使用“&amp;”(ASCII十进制38)代替“&amp;”避免与字符引用(实体引用打开分隔符)的开头混淆。作者还应在属性值中使用“&amp;”,因为CDATA属性值中允许使用字符引用。

应该解决它:使用&amp;而不是&

答案 1 :(得分:0)

您是否正在调用MFMailComposeViewController的

setMessageBody:isHTML:

你将isHTML设置为什么?

根据它的设置,MFMailComposeViewController可能正在尝试帮助您对整个邮件正文进行编码......

要么自己编码身体,要么整个身体都是HTML。