【问题标题】:How do you apply htmlentities selectively?您如何有选择地应用 htmlentities?
【发布时间】:2010-11-14 09:29:40
【问题描述】:

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

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

有没有办法使用现有功能有效地做到这一点,还是我需要实现这个功能?

【问题讨论】:

  • 这是一个矛盾的陈述:我希望浏览器显示标记,而不是呈现 HTML。
  • 无论如何你都应该对 HTML 进行编码,并且可能正在寻找像 stackoverflow.com/questions/1820870/… 这样的 URL 解析器
  • @stillstanding 我认为“我希望浏览器显示 HTML 代码,而不是渲染它”,意思是他希望 HTML 代码“按原样”显示,即显示屏幕上的<b><b>,但不希望浏览器实际将里面的文本呈现为粗体。

标签: php


【解决方案1】:
  • 您可以滚动自己的格式(或使用 bbcode、markdown 或其他格式)。

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

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

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

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

另见this question;尤其是我的回答。

【讨论】:

  • 感谢 aib。我认为编写一个小型解析器是要走的路。是的,相信我,我不会错误地使用正则表达式 :)
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多