PHP htmlspecialchars() 或 htmlentities() 有例外
PHP htmlspecialchars() or htmlentities() with exception
如何为 htmlspecialchars()
或 htmlentities()
定义例外?
我想将所有特殊字符转换为 HTML 安全,<strong><b><i><em><br>
除外
最简单的方法是使用 htmlentities
转换您的字符串,然后使用 preg_replace 替换回选定的标签:
<?php
$string = '<p><strong>A <i>test</i> string with a <a href="#">Test link</a></strong></p>';
$encoded_string = htmlentities($string);
$encoded_string = preg_replace('/<(\/?(strong|b|i|em|br))>/', '<>', $encoded_string);
echo($encoded_string);
//outputs: <p><strong>A <i>test</i> string with a <a href="#">Test link</a></strong></p>
当然,如果您还想处理标签内的参数,那么正则表达式模式需要一些工作,尽管这些标签通常缺少任何参数。
我稍微修改了@MrLumie 的解决方案,添加了另一个 (.?\/)?
以保留 <br>
和 <br />
(尽管将它们都转换为 <br>
):
/<(\/?(strong|b|i|em|br))(.?\/)?>/i
如何为 htmlspecialchars()
或 htmlentities()
定义例外?
我想将所有特殊字符转换为 HTML 安全,<strong><b><i><em><br>
最简单的方法是使用 htmlentities
转换您的字符串,然后使用 preg_replace 替换回选定的标签:
<?php
$string = '<p><strong>A <i>test</i> string with a <a href="#">Test link</a></strong></p>';
$encoded_string = htmlentities($string);
$encoded_string = preg_replace('/<(\/?(strong|b|i|em|br))>/', '<>', $encoded_string);
echo($encoded_string);
//outputs: <p><strong>A <i>test</i> string with a <a href="#">Test link</a></strong></p>
当然,如果您还想处理标签内的参数,那么正则表达式模式需要一些工作,尽管这些标签通常缺少任何参数。
我稍微修改了@MrLumie 的解决方案,添加了另一个 (.?\/)?
以保留 <br>
和 <br />
(尽管将它们都转换为 <br>
):
/<(\/?(strong|b|i|em|br))(.?\/)?>/i