(PHP 4, PHP 5, PHP 7, PHP 8)
htmlspecialchars — 將特殊字符轉(zhuǎn)換為 HTML 實(shí)體
$string
,$flags
= ENT_COMPAT | ENT_HTML401,$encoding
= ini_get("default_charset"),$double_encode
= true
某類字符在 HTML 中有特殊用處,如需保持原意,需要用 HTML 實(shí)體來表達(dá)。 本函數(shù)會返回字符轉(zhuǎn)義后的表達(dá)。 如需轉(zhuǎn)換子字符串中所有關(guān)聯(lián)的名稱實(shí)體,使用 htmlentities() 代替本函數(shù)。
如果傳入字符的字符編碼和最終的文檔是一致的,則用函數(shù)處理的輸入適合絕大多數(shù) HTML 文檔環(huán)境。 然而,如果輸入的字符編碼和最終包含字符的文檔是不一樣的, 想要保留字符(以數(shù)字或名稱實(shí)體的形式),本函數(shù)以及 htmlentities() (僅編碼名稱實(shí)體對應(yīng)的子字符串)可能不夠用。 這種情況可以使用 mb_encode_numericentity() 代替。
字符 | 替換后 |
---|---|
& (& 符號) |
& |
" (雙引號) |
" ,除非設(shè)置了 ENT_NOQUOTES |
' (單引號) |
設(shè)置了 ENT_QUOTES 后,
'
(如果是 ENT_HTML401 ) ,或者 ' (如果是
ENT_XML1 、 ENT_XHTML 或
ENT_HTML5 )。
|
< (小于) |
< |
> (大于) |
> |
string
待轉(zhuǎn)換的 string。
flags
位掩碼,由以下某個(gè)或多個(gè)標(biāo)記組成,設(shè)置轉(zhuǎn)義處理細(xì)節(jié)、無效單元序列、文檔類型。
默認(rèn)是
ENT_COMPAT | ENT_HTML401
。
常量名稱 | 描述 |
---|---|
ENT_COMPAT |
會轉(zhuǎn)換雙引號,不轉(zhuǎn)換單引號。 |
ENT_QUOTES |
既轉(zhuǎn)換雙引號也轉(zhuǎn)換單引號。 |
ENT_NOQUOTES |
單/雙引號都不轉(zhuǎn)換 |
ENT_IGNORE |
靜默丟棄無效的代碼單元序列,而不是返回空字符串。 不建議使用此標(biāo)記, 因?yàn)樗?a class="link external" >? 可能有安全影響。 |
ENT_SUBSTITUTE |
替換無效的代碼單元序列為 Unicode 代替符(Replacement Character), U+FFFD (UTF-8) 或者 � (其他),而不是返回空字符串。 |
ENT_DISALLOWED |
為文檔的無效代碼點(diǎn)替換為 Unicode 代替符(Replacement Character): U+FFFD (UTF-8),或 �(其他),而不是把它們留在原處。 比如以下情況下就很有用:要保證 XML 文檔嵌入額外內(nèi)容時(shí)格式合法。 |
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.
本函數(shù)使用效果上,如果 string
對以下字符編碼是有效的,
ISO-8859-1
、 ISO-8859-15
、
UTF-8
、 cp866
、
cp1251
、 cp1252
、
KOI8-R
將具有相同的效果。
也就是說,在這些編碼里,
受 htmlspecialchars() 影響的字符會占據(jù)相同的位置。
支持以下字符集:
字符集 | 別名 | 描述 |
---|---|---|
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 兼容的多字節(jié) 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 | 簡體中文,中國國家標(biāo)準(zhǔn)字符集。 |
BIG5-HKSCS | 繁體中文,附帶香港擴(kuò)展的 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. |
注意: 其他字符集沒有認(rèn)可。將會使用默認(rèn)編碼并拋出異常。
double_encode
關(guān)閉 double_encode
時(shí),PHP 不會轉(zhuǎn)換現(xiàn)有的 HTML 實(shí)體,
默認(rèn)是全部轉(zhuǎn)換。
轉(zhuǎn)換后的 string。
如果指定的編碼 encoding
里,
string
包含了無效的代碼單元序列,
沒有設(shè)置 ENT_IGNORE
或者
ENT_SUBSTITUTE
標(biāo)記的情況下,會返回空字符串。
版本 | 說明 |
---|---|
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 參數(shù)的默認(rèn)值改成 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 |
增加參數(shù) double_encode 。
|
示例 #1 htmlspecialchars() 例子
<?php
$new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
echo $new; // <a href='test'>Test</a>
?>
注意:
注意,本函數(shù)不會轉(zhuǎn)換以上列表以外的實(shí)體。 完整轉(zhuǎn)換請參見 htmlentities()。
注意:
如果
flags
的設(shè)置模糊易混淆,將遵循以下規(guī)則:
- 當(dāng)
ENT_COMPAT
、ENT_QUOTES
、ENT_NOQUOTES
都沒設(shè)置, 默認(rèn)就是ENT_NOQUOTES
。- 如果設(shè)置不止一個(gè)
ENT_COMPAT
、ENT_QUOTES
、ENT_NOQUOTES
,優(yōu)先級最高的是ENT_QUOTES
, 其次是ENT_COMPAT
。- 當(dāng)
ENT_HTML401
、ENT_HTML5
、ENT_XHTML
、ENT_XML1
都沒設(shè)置,默認(rèn)是ENT_HTML401
。- 如果設(shè)置不止一個(gè)
ENT_HTML401
、ENT_HTML5
、ENT_XHTML
、ENT_XML1
, 優(yōu)先級最高的是ENT_HTML5
其次是ENT_XHTML
、ENT_XML1
和ENT_HTML401
。- 如果設(shè)置不止一個(gè)
ENT_DISALLOWED
、ENT_IGNORE
、ENT_SUBSTITUTE
,優(yōu)先級最高的是ENT_IGNORE
, 其次是ENT_SUBSTITUTE
。