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('/&lt;(\/?(strong|b|i|em|br))&gt;/', '<>', $encoded_string);

echo($encoded_string); 
//outputs: &lt;p&gt;<strong>A <i>test</i> string with a &lt;a href=&quot;#&quot;&gt;Test link&lt;/a&gt;</strong>&lt;/p&gt;

当然,如果您还想处理标签内的参数,那么正则表达式模式需要一些工作,尽管这些标签通常缺少任何参数。

我稍微修改了@MrLumie 的解决方案,添加了另一个 (.?\/)? 以保留 <br><br />(尽管将它们都转换为 <br>):

/&lt;(\/?(strong|b|i|em|br))(.?\/)?&gt;/i

如下所示:https://regex101.com/r/G6D2lj/1