你如何有选择地应用htmlentities?

时间:2010-11-14 09:29:41

标签: php

每当在HTML文档中显示文本时,由于多种原因,我总是通过htmlentities。其中一个原因是如果文本包含HTML,我希望浏览器显示HTML代码,而不是渲染它。

我正在编写的应用程序要求我仍然使用htmlentities进行编码,但需要保留超链接。

有没有办法使用现有功能有效地执行此操作,还是需要实现此功能?

2 个答案:

答案 0 :(得分:0)

通常的做法是通过htmlspecialchars()传递任何“可能有害的数据”,然后再将其显示为网页的一部分。您可以为用户的评论,注释等执行此操作。

对于用户输入的任何网址,您可以使用htmlspecialchars()在屏幕上显示该网址。 URL将按原样显示在屏幕上。 (任何&都会转发到&amp;,但是当屏幕上显示时,它会再次变为&。也许您关注的是它何时被链接,如<a href="______">text</a>中所示在哪种情况下,您可以转义4个字符:< > " ',因为您不希望&amp;进一步转义为&amp;amp;,或者您可以使用filter_var()来清理网址:http://us3.php.net/manual/en/function.filter-var.php

答案 1 :(得分:0)

  • 您可以滚动自己的格式(或使用bbcode,markdown或其他格式)。

  • 您可以解析HTML(使用适当的库;请不要使用正则表达式)并选择性地保留所有&lt; a&gt;标签

  • 您可以使用正则表达式来允许类似HTML的&lt; a&gt; -tag语法,例如以

    的形式
    <a href="..."[ rel="..."]>...</a>
    

    但请记住,它不会是HTML。 (对于初学者,HTML允许在rel之前指定href。)

另见this question;特别是对我的回答的评论。