某些字符在 HTML 中具有特殊意义,如果要保留其含义,则应由 HTML 实体表示。
以我所拥有的有限知识,可以在 PHP 中以两种不同的方式轻松完成。像这样:
<?php
$some_code = '<a href="#test">Test</a>';
echo '<pre><code>' . htmlspecialchars( $some_code, ENT_QUOTES ) . '</code></pre>';
?>
或者这样:
<?php
$some_code = '<a href="#test">Test</a>';
echo '<pre><code>' . str_replace( array('<', '>', '&', '\'', '"'), array('<', '>', '&', ''', '"'), $some_code ) . '</code></pre>';
?>
(这只是为了向您展示我正在尝试做什么,而不是我在现实中是如何做的。例如,$some_code
是动态提供的,而不是手动提供的。)
不考虑htmlspecialchars()
简单地使用over有多容易str_replace()
,两者中的哪一个将是我想要做的更好的选择?(就性能而言,就是这样。)
更新
好的,我看到这需要更多上下文。这就是我真正想要做的事情:
<?php
$some_code = '<a href="#test">Test</a>';
echo '<pre><code>' . str_replace(
// Replace these special characters
array( '<', '>', '&', '\'', '"', '‘', '’', '“', '”', '/', '[', ']' ),
// With the HTML entities below, respectively
array('<', '>', '&', ''', '"', ''', ''', '"', '"', '"', '/', '[', ']'),
$some_code
) . '</code></pre>';
?>
相对:
<?php
$some_code = '<a href="#test">Test</a>';
return '<pre><code>' . str_replace(
array( '‘', '’', '“', '”', '/', '[', ']' ),
array(''', ''', '"', '"', '"', '/', '[', ']'),
htmlspecialchars( $content, ENT_QUOTES )
) . '</code></pre>';
?>