【问题标题】:Handling HTML entities in contenteditable divs处理 contenteditable div 中的 HTML 实体
【发布时间】:2012-08-01 19:07:55
【问题描述】:

我正在使用内容可编辑的<div> 来编辑电子邮件(特别是使用NicEdit)。我希望能够以表单的形式提交消息正文,使用 PHP 对其进行处理,然后使用mail() 函数(或PHPMailer)发送。

我遇到的问题与特殊字符和编码有关。当在 div 中键入 πá 之类的特殊字符时,它保持不变,而不是转换为 πá 之类的 html 实体。在某些情况下它会被转换,例如 <<

所以在提交表单的时候,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>

但是从 Google 和 StackOverflow 上搜索来看,这似乎是一件坏事。所以我认为我一定在某个时候对编码做错了,无论是在发送电子邮件之前还是在返回原始内容可编辑数据之前。我正在寻找一种可行的解决方案,理想情况下没有像 HTMLPurifier 这样的复杂库。

有什么想法吗?

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

【问题讨论】:

    标签: encoding html-entities phpmailer php


    【解决方案1】:

    只是一个想法:

    • 第 1 步: 将您的 &lt;div&gt; &lt;b&gt;&lt;/b&gt; &lt;/div&gt; 转换为 [div] [b] [/b] [/div]
    • 第 2 步: 你的重要性
    • 第 3 步:将您的 [div] [b] [/b] [/div] 转换为 &lt;div&gt; &lt;b&gt; &lt;/b&gt; &lt;/div&gt;

    顺便说一句,我认为你可以在步骤 1 之前使用 strip_tags()...

    【讨论】:

    • 感谢您的意见,但我试图避免这种方法。当我在寻找答案时,我发现 this 基于相同的方法但被否决了。同样this 说这种方法“根本上是错误的”。如果没有更好的解决方案,这似乎是一个很好的最后手段。
    • 嗯,这个方法似乎和我希望的一样有效,所以我想我会坚持下去。感谢您的回答。
    猜你喜欢
    • 2011-08-26
    • 2011-10-05
    • 1970-01-01
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多