问题:如何使用PHP删除HTML标记但允许使用更大和更小的符号?
如果我使用PHP的strip_tags()
函数,它就不能正常工作:
$string = '<p>if A > B</p>'
echo strip_tags($string); // if A B
// but I want to output "if A > B"
更新
基本上,我只想允许/显示纯文本。
答案 0 :(得分:4)
您可以使用HTML Purifier这不仅适用于您撰写的<p>if A > B</p>
示例,还适用于DrJokepu撰写的示例<p>1<2 && 6>4</p>
。
如果输入<p>1<2 && 6>4</p>
允许的元素设置为none,则HTML净化器会提供输出:1<2 && 6>4
。
答案 1 :(得分:0)
这将删除看起来像HTML标记的所有内容。
htmlentities(preg_replace('/<\\S.*?>/', '', $text));
答案 2 :(得分:0)
不幸的是,最简单和最可靠的方法是使用HTML解析器。 This one会做到这一点。我不知道它是否会像上面那样处理HTML片段。如果没有,那么包装以使其可接受HTML应该是微不足道的。
正如其他人指出的那样,使用正则表达式解析HTML有许多边缘情况可以满足和困难,因为HTML不常规。
答案 3 :(得分:0)
试试我写的这个正则表达式:&lt;([^&gt;] ?=“(\”| [^“])?”“?([^&gt; ] = ''(\ '' | [^ ''])? '') [^&gt;有] * GT;
?答案 4 :(得分:0)
使用:
<p><?php echo htmlspecialchars("if A > B") ?></p>
(当然你可以使用任何输入而不是文字字符串)
htmlspecialchars()
将纯文本转换为HTML文字,保留<
和>
。