底下的 "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));
?>
--------------------
輸出
--------------------
陣列
'"' => '"'
''' => '''
'<' => '<'
'>' => '>'
'&' => '&'
'''
--------------------
這則留言並不是要再次報告這個錯誤(雖然我確實認為它是一個錯誤),而是要補完這個範例並警告大家這個陷阱。
為了確保你的 htmlspecialchars_decode 在 PHP4 上的模擬版本可以正常運作,你應該這樣做
<?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