2014-09-29 68 views
1

我在使用HTMLPurifier php库时遇到了问题。我在我的应用程序的所有文本区域使用名为'Summernote'的所见即所得编辑器。所见即所得在纯化后呈现的脚本标记

当写内部sommernote喜欢的东西:

<script>alert('test');</script>

POST数据来作为通过

<p>&lt;script&gt;alert('test');&lt;/script&gt;</p>

然而,一旦这是通过HTMLPurifier跑了,它不会删除脚本标签被转换成普通字符。所以当我在summernote中编辑这个文本时,它实际上运行脚本!

这里是什么处理到编辑器中的图像:

HTML Purifier Issue

这里是如何存储在数据库中:

HTML Purifier Issue - 2

如果任何人有任何想法,请让我知道!

编辑:另外,如果我禁用了Summernote所见即所得编辑器,使用HTMLPurifier进行清理时,将成功从textarea中删除标签。

回答

5

我怀疑这里的根本问题是一个常见的错误:

当你输出纯HTML到您的所见即所得,您需要使用就可以了htmlspecialchars()。因此,而不是有这个在渲染页面的源代码

<textarea ...> 
    <p>&lt;script&gt;alert('test');&lt;/script&gt;</p> 
</textarea> 

...你需要有这样的:

<textarea ...> 
    &lt;p&gt;&amp;lt;script&amp;gt;alert('test');&amp;lt;/script&amp;gt;&lt;/p&gt; 
</textarea> 

然后按预期所见即所得应有的功能。 (如果没有,爱德华其实是对的 - 你应该看看不同的编辑器。)

这是做这件事的正确方法的原因是因为你想在你的textarea中使用文本,而不是HTML。如果考虑一个没有HTML Purifier的场景,并且有人输入</textarea>标签,然后输入其他标签,这是最容易实现的。那些会跳出<textarea>,所见即所得。所以你把你输出的东西放在htmlspecialchars()周围,这应该是textarea中的文本。它可以直接处理HTML标签的事实是一个巧合 - 它很具误导性,如果它不起作用可能会更好,但大多数浏览器仍然会显示HTML标签,就好像它们已被转义,如果你不做到这一点。

一旦文本被正确转义,然后所见即所得可以进来,将文本和解释为HTML。

看看htmlspecialchars()是否解决了您的问题。它应该这样做,没有导致副作用,即使这现在可能看起来反直觉。

(当然,如果你已经使用htmlspecialchars()所描述的,那么我恐怕没有一个想法副手。)

+0

这是问题(使用'输出用htmlspecialchars()'来编辑),我完全忘了这个功能。万分感谢! – 2014-09-30 19:14:00

+0

甜。很高兴你修好了它! :) – pinkgothic 2014-09-30 21:44:46