【发布时间】:2012-08-01 19:07:55
【问题描述】:
我正在使用内容可编辑的<div> 来编辑电子邮件(特别是使用NicEdit)。我希望能够以表单的形式提交消息正文,使用 PHP 对其进行处理,然后使用mail() 函数(或PHPMailer)发送。
我遇到的问题与特殊字符和编码有关。当在 div 中键入 π 或 á 之类的特殊字符时,它保持不变,而不是转换为 &pi; 或 &aacute; 之类的 html 实体。在某些情况下它会被转换,例如 &lt; 到 &lt;。
所以在提交表单的时候,PHP接收到的数据是很难处理的。写作
pi is "less than" 2 × pi:
π < 2π
将以下数据放入contenteditable div中
<div>pi is "less than" 2 × pi:</div>
<div>π < 2π</div>
这就是 PHP 接收到的内容。但是使用htmlentities() 给出了
<div>pi is "less than" 2 × pi:</div>
<div>π < 2π</div>
除了HTML标签之外是正确的,所以这种方法似乎没用。最初收到的数据可以插入数据库(我认为),但是当我尝试将其作为电子邮件发送时,编码会混乱。
在我看来,解决方案似乎是对 HTML 标记之外的实体进行编码以获得如下内容:
<div>pi is "less than" 2 × pi:</div>
<div>π < 2π</div>
但是从 Google 和 StackOverflow 上搜索来看,这似乎是一件坏事。所以我认为我一定在某个时候对编码做错了,无论是在发送电子邮件之前还是在返回原始内容可编辑数据之前。我正在寻找一种可行的解决方案,理想情况下没有像 HTMLPurifier 这样的复杂库。
有什么想法吗?
编辑:我已经尝试this solution 将特殊字符转换为不在标签中的 html 实体。当我尝试输入像π 这样的特殊字符时,这似乎很有效。但是该链接的答案已被否决,a similar answer 表示该方法从根本上是错误的。谁能告诉我这是为什么,为什么我不应该坚持htmlentitiesOutsideHTMLTags?
【问题讨论】:
标签: encoding html-entities phpmailer php