下面“htmlspecialchars_decode()”的示例不幸的是不适用于所有 PHP4 版本。
来自 PHP 手册的引用
"get_html_translation_table() 将返回在 htmlspecialchars() 和 htmlentities() 内部使用的转换表。"
但事实并非如此!至少 PHP 4.4.2 版本不是这样。
这已在错误报告中报告过(http://bugs.php.net/bug.php?id=25927),但被标记为 BOGUS。
证明
代码
--------------------
<?php
var_dump(get_html_translation_table(HTML_SPECIALCHARS,ENT_QUOTES));
var_dump(htmlspecialchars('\'',ENT_QUOTES));
?>
--------------------
输出
--------------------
数组
'"' => '"'
''' => '''
'<' => '<'
'>' => '>'
'&' => '&'
'''
--------------------
此注释现在不是要再次报告此错误(尽管我确实认为这是一个错误),而是要完成示例并警告人们注意此陷阱。
为了确保您的 PHP4 htmlspecialchars_decode 模拟有效,您应该执行以下操作
<?php
function htmlspecialchars_decode($string,$style=ENT_COMPAT)
{
$translation = array_flip(get_html_translation_table(HTML_SPECIALCHARS,$style));
if($style === ENT_QUOTES){ $translation['''] = '\''; }
return strtr($string,$translation);
}
?>
此致,Thomas