如何处理'&';从iPhone Mail.app以HTML格式发送的URL中

如何处理'&';从iPhone Mail.app以HTML格式发送的URL中,iphone,cocoa-touch,nsstring,url-encoding,Iphone,Cocoa Touch,Nsstring,Url Encoding,如果已经回答了,请道歉。有类似的主题,但我找不到与Cocoa和NSStrings相关的主题 我正在构建一个可点击的URL,将其嵌入到HTML电子邮件中,通过iPhone上的MFMailComposeViewController发送。我创建url,然后使用stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding来修饰空白,等等。然后添加一些周围的HTML以获得: <a href = "http://www.site.com/

如果已经回答了,请道歉。有类似的主题,但我找不到与Cocoa和NSStrings相关的主题

我正在构建一个可点击的URL,将其嵌入到HTML电子邮件中,通过iPhone上的
MFMailComposeViewController
发送。我创建url,然后使用
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding
来修饰空白,等等。然后添加一些周围的HTML以获得:

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

一切都很好,所以它被附加到邮件正文中。但是一旦
[mailComposer setMessageBody:emailBody isHTML:YES]
所有
都变成
&这在我的URL中并不理想

我能控制这个吗?有更好的编码算法吗?我的HTML有点生疏也许我使用了错误的编码?我确信在服务器上我可以解析
&返回到
&
但正在寻找可可豆的方法


谢谢

实际上,&应该始终编码为
&。包括链接。包括表单值分隔符。所以它完全是你想要的,即使你不知道你想要它

这样看:在你的URL中,你有
&age=53..
。它首先被解释为一个字符实体,只有在这不起作用之后,它才会被解释为一个符号,后面跟着更多的字符数据

在这一点上,双方的立场相当明确:

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


应该解决这个问题:使用
&不是
&

您正在调用MFMailComposeViewController的

setMessageBody:isHTML:
您将
isHTML
设置为什么

根据它的设置,很可能是MFMailComposeViewController试图帮助您对整个消息体进行编码


不要自己对正文进行编码,也不要将整个正文制作成HTML。

框架中是否有任何东西可以转换
&返回到
&
?您可以尝试StringByReplacingPercentescapesusingEncode:。但同样,你不应该这样做。逃逸者&;将工作,并且是有效的HTML将失败。@Meltemi-只要您使用HTML解析器,它就会“正常工作”。只有当你开始尝试通过将HTML当作运行正则表达式的文本来提取URL时,你才会遇到问题