下面 "htmlspecialchars_decode()" 的示例不幸的是不适用于所有 PHP4 版本。
来自 PHP 手册的引用
"get_html_translation_table() 将返回在 htmlspecialchars() 和 htmlentities() 内部使用的转换表。"
但事实并非如此!至少对于 PHP 版本 4.4.2 不是这样。
这已经在 bug 报告中被报道 (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));
?>
--------------------
输出
--------------------
array
'"' => '"'
''' => '''
'<' => '<'
'>' => '>'
'&' => '&'
'''
--------------------
此注释不是为了再次报告此错误(虽然我确实认为这是一个错误),而是为了补充示例并提醒人们注意这个陷阱。
为了确保你的 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);
}
?>
Br, Thomas