[英]when using htmlspecialchars to escape double-quotes, why is ENT_QUOTES required when using ENT_SUBSTITUTE?
在php 7.0.3版中使用htmlspecialchars
時,我注意到以下行為:
php > echo htmlspecialchars('"');
"
php > echo htmlspecialchars('"', ENT_SUBSTITUTE);
"
php > echo htmlspecialchars('"', ENT_QUOTES | ENT_SUBSTITUTE);
"
我們也想使用ENT_SUBSTITUTE
標志來轉義雙引號。 請注意,僅使用ENT_SUBSTITUTE
標志時,雙引號不會轉義。
如果我們想轉義雙引號,是否需要在ENT_SUBSTITUTE
加上ENT_QUOTES
標志? 為什么是這樣?
htmlspecialchars的文檔沒有說使用ENT_SUBSTITUTE
時需要ENT_QUOTES
。 實際上,似乎提出了相反的建議-除非存在ENT_NOQUOTES
標志,否則雙引號應始終轉義。
當您將標志顯式傳遞給htmlspecialchars
,將替換默認標志 。
htmlspecialchars($data)
等同於htmlspecialchars($data, ENT_COMPAT | ENT_HTML401)
htmlspecialchars($data, ENT_SUBSTITUTE)
丟棄規則ENT_COMPAT
和ENT_HTML401
只使用規則從ENT_SUBSTITUTE
。
(並且ENT_COMPAT
導致雙引號被轉換)。
ENT_COMPAT | ENT_HTML401
ENT_COMPAT | ENT_HTML401
是$flags
參數的默認值。 當您改為傳遞ENT_SUBSTITUTE
,您將覆蓋默認值。 現在不再使用ENT_COMPAT
,它負責報價。 如果要將ENT_SUBSTITUTE
添加到默認參數,則應正確編寫:
htmlspecialchars('"', ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.