我正在使用 contenteditable<div>
来编辑电子邮件(特别是使用NicEdit)。我希望能够以表单形式提交消息正文,使用 PHP 处理它,并使用mail()
函数(或PHPMailer)发送它。
我遇到的问题与特殊字符和编码有关。当一个特殊字符(例如π
or á
)输入到 div 中时,它保持不变,而不是被转换为类似π
or的 html 实体á
。在某些情况下它会被转换,<
例如<
.
所以在提交表单的时候,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>
但从谷歌和 StackOverflow 上搜索这似乎是一件坏事。所以我认为我一定在某个时候对编码做错了,无论是在发送电子邮件之前还是在返回原始内容可编辑数据之前。我正在寻找一种可行的解决方案,理想情况下没有像 HTMLPurifier 这样的复杂库。
有任何想法吗?
编辑:当特殊字符不在标签中时,我已经尝试过将特殊字符转换为 html 实体的解决方案。当我尝试输入特殊字符(如π
. 但是该链接的答案已被否决,类似的答案说该方法从根本上是错误的。谁能告诉我为什么会这样,为什么我不应该坚持htmlentitiesOutsideHTMLTags
?