每当在HTML文档中显示文本时,由于多种原因,我总是通过htmlentities。其中一个原因是如果文本包含HTML,我希望浏览器显示HTML代码,而不是渲染它。
我正在编写的应用程序要求我仍然使用htmlentities进行编码,但需要保留超链接。
有没有办法使用现有功能有效地执行此操作,还是需要实现此功能?
答案 0 :(得分:0)
通常的做法是通过htmlspecialchars()
传递任何“可能有害的数据”,然后再将其显示为网页的一部分。您可以为用户的评论,注释等执行此操作。
对于用户输入的任何网址,您可以使用htmlspecialchars()
在屏幕上显示该网址。 URL将按原样显示在屏幕上。 (任何&
都会转发到&
,但是当屏幕上显示时,它会再次变为&
。也许您关注的是它何时被链接,如<a href="______">text</a>
中所示在哪种情况下,您可以转义4个字符:< > " '
,因为您不希望&
进一步转义为&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;特别是对我的回答的评论。