htmlspecialchars
(PHP 4, PHP 5, PHP 7, PHP 8)
htmlspecialchars — 將特殊字元轉換為 HTML 實體
說明
string
$string
,int
$flags
= ENT_COMPAT | ENT_HTML401,string
$encoding
= ini_get("default_charset"),bool
$double_encode
= true
): string
某類字元在 HTML 中有特殊用處,如需保持原意,需要用 HTML 實體來表達。 本函式會返回字元轉義后的表達。 如需轉換子字串中所有關聯的名稱實體,使用 htmlentities() 代替本函式。
如果傳入字元的字元編碼和最終的文件是一致的,則用函式處理的輸入適合絕大多數 HTML 文件環境。 然而,如果輸入的字元編碼和最終包含字元的文件是不一樣的, 想要保留字元(以數字或名稱實體的形式),本函式以及 htmlentities() (僅編碼名稱實體對應的子字串)可能不夠用。 這種情況可以使用 mb_encode_numericentity() 代替。
字元 | 替換后 |
---|---|
& (& 符號) |
& |
" (雙引號) |
" ,除非設定了 ENT_NOQUOTES |
' (單引號) |
設定了 ENT_QUOTES 后,
'
(如果是 ENT_HTML401 ) ,或者 ' (如果是
ENT_XML1 、 ENT_XHTML 或
ENT_HTML5 )。
|
< (小於) |
< |
> (大於) |
> |
參數
-
string
-
待轉換的 string。
-
flags
-
位掩碼,由以下某個或多個標記組成,設定轉義處理細節、無效單元序列、文件型別。 預設是
ENT_COMPAT | ENT_HTML401
。有效的 flags
常量常量名稱 描述 ENT_COMPAT
會轉換雙引號,不轉換單引號。 ENT_QUOTES
既轉換雙引號也轉換單引號。 ENT_NOQUOTES
單/雙引號都不轉換 ENT_IGNORE
靜默丟棄無效的程式碼單元序列,而不是返回空字串。 不建議使用此標記, 因為它» 可能有安全影響。 ENT_SUBSTITUTE
替換無效的程式碼單元序列為 Unicode 代替符(Replacement Character), U+FFFD (UTF-8) 或者 � (其他),而不是返回空字串。 ENT_DISALLOWED
為文件的無效程式碼點替換為 Unicode 代替符(Replacement Character): U+FFFD (UTF-8),或 �(其他),而不是把它們留在原處。 比如以下情況下就很有用:要保證 XML 文件嵌入額外內容時格式合法。 ENT_HTML401
以 HTML 4.01 處理程式碼。 ENT_XML1
以 XML 1 處理程式碼。 ENT_XHTML
以 XHTML 處理程式碼。 ENT_HTML5
以 HTML 5 處理程式碼。 -
encoding
-
An optional argument defining the encoding used when converting characters.
If omitted,
encoding
defaults to the value of the default_charset configuration option.Although this argument is technically optional, you are highly encouraged to specify the correct value for your code if the default_charset configuration option may be set incorrectly for the given input.
本函式使用效果上,如果
string
對以下字元編碼是有效的,ISO-8859-1
、ISO-8859-15
、UTF-8
、cp866
、cp1251
、cp1252
、KOI8-R
將具有相同的效果。 也就是說,在這些編碼里, 受 htmlspecialchars() 影響的字元會佔據相同的位置。支援以下字符集:
支援的字符集列表 字符集 別名 描述 ISO-8859-1 ISO8859-1 西歐,Latin-1 ISO-8859-5 ISO8859-5 Little used cyrillic charset (Latin/Cyrillic). ISO-8859-15 ISO8859-15 西歐,Latin-9。增加歐元符號,法語和芬蘭語字母在 Latin-1(ISO-8859-1) 中缺失。 UTF-8 ASCII 相容的多位元組 8 位 Unicode。 cp866 ibm866, 866 DOS 特有的西里爾編碼。本字符集在 4.3.2 版本中得到支援。 cp1251 Windows-1251, win-1251, 1251 Windows 特有的西里爾編碼。本字符集在 4.3.2 版本中得到支援。 cp1252 Windows-1252, 1252 Windows 特有的西歐編碼。 KOI8-R koi8-ru, koi8r 俄語。本字符集在 4.3.2 版本中得到支援。 BIG5 950 繁體中文,主要用於中國臺灣省。 GB2312 936 簡體中文,中國國家標準字符集。 BIG5-HKSCS 繁體中文,附帶香港擴充套件的 Big5 字符集。 Shift_JIS SJIS, 932 日語 EUC-JP EUCJP 日語 MacRoman Mac OS 使用的字串。 ''
An empty string activates detection from script encoding (Zend multibyte), default_charset and current locale (see nl_langinfo() and setlocale()), in this order. Not recommended. 注意: 其他字符集沒有認可。將會使用預設編碼並拋出異常。
-
double_encode
-
關閉
double_encode
時,PHP 不會轉換現有的 HTML 實體, 預設是全部轉換。
返回值
轉換后的 string。
如果指定的編碼 encoding
里,
string
包含了無效的程式碼單元序列,
沒有設定 ENT_IGNORE
或者
ENT_SUBSTITUTE
標記的情況下,會返回空字串。
更新日誌
版本 | 說明 |
---|---|
5.6.0 |
The default value for the encoding parameter was
changed to be the value of the
default_charset configuration
option.
|
5.4.0 |
encoding 參數的預設值改成 UTF-8。
|
5.4.0 |
增加常量 ENT_SUBSTITUTE 、 ENT_DISALLOWED 、
ENT_HTML401 、 ENT_XML1 、
ENT_XHTML 、 ENT_HTML5 。
|
5.3.0 |
增加常量 ENT_IGNORE 。
|
5.2.3 |
增加參數 double_encode 。
|
範例
示例 #1 htmlspecialchars() 例子
<?php
$new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
echo $new; // <a href='test'>Test</a>
?>
註釋
注意:
注意,本函式不會轉換以上列表以外的實體。 完整轉換請參見 htmlentities()。
注意:
如果
flags
的設定模糊易混淆,將遵循以下規則:
- 當
ENT_COMPAT
、ENT_QUOTES
、ENT_NOQUOTES
都沒設定, 預設就是ENT_NOQUOTES
。- 如果設定不止一個
ENT_COMPAT
、ENT_QUOTES
、ENT_NOQUOTES
,優先順序最高的是ENT_QUOTES
, 其次是ENT_COMPAT
。- 當
ENT_HTML401
、ENT_HTML5
、ENT_XHTML
、ENT_XML1
都沒設定,預設是ENT_HTML401
。- 如果設定不止一個
ENT_HTML401
、ENT_HTML5
、ENT_XHTML
、ENT_XML1
, 優先順序最高的是ENT_HTML5
其次是ENT_XHTML
、ENT_XML1
和ENT_HTML401
。- 如果設定不止一個
ENT_DISALLOWED
、ENT_IGNORE
、ENT_SUBSTITUTE
,優先順序最高的是ENT_IGNORE
, 其次是ENT_SUBSTITUTE
。
參見
- get_html_translation_table() - 返回使用 htmlspecialchars 和 htmlentities 后的轉換表
- htmlspecialchars_decode() - 將特殊的 HTML 實體轉換回普通字元
- strip_tags() - 從字串中去除 HTML 和 PHP 標記
- htmlentities() - 將字元轉換為 HTML 轉義字元
- nl2br() - 在字串所有新行之前插入 HTML 換行標記