如何使用htmlspecialchars,但只允许特定的HTML代码通过而不进行转换?

2022-08-30 23:31:44

这是我拥有的代码行,效果很好:

$content = htmlspecialchars($_POST['content'], ENT_QUOTES);

但我想做的是只允许某些类型的HTML代码通过而不进行转换。以下是我想通过的HTML代码列表:

<pre> </pre>
<b> </b>
<em> </em>
<u> </u>
<ul> </ul>
<li> </li>
<ol> </ol>

随着我的前进,我希望以后能够添加更多的HTML,因为我想到了它。有人可以帮我修改上面的代码,以便上面的指定HTML代码列表可以在不转换的情况下通过吗?


答案 1

我想你可以在事后这样做:

// $str is the result of htmlspecialchars()
preg_replace('#&lt;(/?(?:pre|b|em|u|ul|li|ol))&gt;#', '<\1>', $str);

它允许编码版本的 and where 位于一组受控的允许标记中。<xx></xx>xx


答案 2

或者你可以选择旧风格:

$content = htmlspecialchars($_POST['content'], ENT_QUOTES);

$turned = array( '&lt;pre&gt;', '&lt;/pre&gt;', '&lt;b&gt;', '&lt;/b&gt;', '&lt;em&gt;', '&lt;/em&gt;', '&lt;u&gt;', '&lt;/u&gt;', '&lt;ul&gt;', '&lt;/ul&gt;', '&lt;li&gt;', '&lt;/li&gt;', '&lt;ol&gt;', '&lt;/ol&gt;' );
$turn_back = array( '<pre>', '</pre>', '<b>', '</b>', '<em>', '</em>', '<u>', '</u>', '<ul>', '</ul>', '<li>', '</li>', '<ol>', '</ol>' );

$content = str_replace( $turned, $turn_back, $content );

推荐