htmlentities() 將字串中所有可轉換的字符轉為 HTML 實體(如 < → <、" → "),是防止 XSS、安全輸出的基礎函數。本文系統整理語法、四大參數、支援字元集、旗標行為與多組實例。
htmlentities(string $string, int $flags = ENT_COMPAT | ENT_HTML401, string $encoding = 'UTF-8', bool $double_encode = true): string
| 常數 | 說明 |
|---|---|
ENT_COMPAT | 預設,僅編碼雙引號 |
ENT_QUOTES | 編碼雙引號與單引號 |
ENT_NOQUOTES | 不編碼任何引號 |
ENT_IGNORE | 忽略無效編碼(不建議,有安全風險) |
ENT_SUBSTITUTE | 無效編碼替換為 Unicode 替代字元 U+FFFD |
ENT_DISALLOWED | 針對指定文檔類型的無效碼點替換 |
ENT_HTML401 | 預設,按 HTML 4.01 處理 |
ENT_HTML5 | 按 HTML5 處理 |
ENT_XML1 | 按 XML 1 處理 |
ENT_XHTML | 按 XHTML 處理 |
UTF-8(預設)、ISO-8859-1、ISO-8859-15、cp866、cp1251、cp1252、KOI8-R、BIG5、GB2312、BIG5-HKSCS、Shift_JIS、EUC-JP、MacRomantrue(預設):已為實體的字符再次編碼false:跳過已為實體的字符ENT_IGNORE/ENT_SUBSTITUTE 則回傳空字串ENT_SUBSTITUTE/ENT_DISALLOWED/ENT_HTML401/ENT_HTML5/ENT_XML1/ENT_XHTML;5.3 新增 ENT_IGNORE;5.2.3 新增 double_encode;4.1 新增 character-set<?php
$str = "Bill & 'Steve'";
echo htmlentities($str, ENT_COMPAT); // 僅雙引號
echo htmlentities($str, ENT_QUOTES); // 雙引號+單引號
echo htmlentities($str, ENT_NOQUOTES); // 不編碼引號
?>
瀏覽器輸出皆為 Bill & 'Steve',但原始碼中引號實體化程度不同。
<?php
$str = "My name is Øyvind Åsane. I'm Norwegian.";
echo htmlentities($str, ENT_QUOTES, "ISO-8859-1");
?>
輸出:My name is Øyvind Åsane. I'm Norwegian.
需將實體還原為字符,請使用 html_entity_decode();查看轉換表請用 get_html_translation_table()。