处理contenteditable div中的HTML实体

时间:2012-08-03 17:45:44

标签: encoding html-entities phpmailer php

我正在使用一个有意义的<div>来编辑电子邮件(具体来说,使用NicEdit)。我希望能够在表单中提交消息正文,使用PHP处理它,并使用mail()函数(或PHPMailer)发送它。

我遇到的问题是使用特殊字符和编码。当在{div}中输入πá等特殊字符时,它会保持不变,而不是转换为&pi;&aacute;等html实体。在某些情况下会将其转换为<&lt;

因此,在提交表单时,PHP收到的数据很难处理。写

pi is "less than" 2 × pi:
π < 2π

将以下数据放入contenteditable div

<div>pi is "less than" 2 × pi:</div>
<div>π < 2π</div>

这就是PHP收到的内容。但是使用htmlentities()会给出

&lt;div&gt;pi is &quot;less than&quot; 2 &times; pi:&lt;/div&gt;
&lt;div&gt;&pi; &lt; 2&pi;&lt;/div&gt;

除了HTML标记之外是正确的,因此这种方法似乎没用。最初收到的数据很适合插入数据库(我认为),但当我尝试将其作为电子邮件发送时,编码会混乱。

从我的观点来看,似乎解决方案是对HTML标记之外的实体进行编码以得到类似的结果:

<div>pi is &quot;less than&quot; 2 &times; pi:</div>
<div>&pi; &lt; 2&pi;</div>

但是从谷歌和StackOverflow上搜索这似乎是一件坏事。因此,我认为我必须在某些时候对编码做错,无论是在发送电子邮件之前还是在回复原始的可信数据之前。我正在寻找一个有效的解决方案,理想情况下没有像HTMLPurifier这样复杂的库。

有什么想法吗?

编辑:我已尝试this solution将特殊字符转换为html实体(如果它们不在标记中)。当我尝试输入π这样的特殊字符时,这似乎很有效。但该链接的答案已被否决,a similar answer表示这种方法根本就是错误的。谁能告诉我为什么会这样,为什么我不应该坚持使用htmlentitiesOutsideHTMLTags

1 个答案:

答案 0 :(得分:0)

只是一个想法:

  • 第1步: 将您的<div> <b></b> </div>转换为[div] [b] [/ b] [/ div]
  • 第2步: 你很幸运
  • 第3步:将[div] [b] [/ b] [/ div]转换为<div> <b> </b> </div>

顺便说一句,我认为您可以在步骤1 ...

之前使用strip_tags()