簡體   English   中英

當使用htmlspecialchars來轉義雙引號時,為什么在使用ENT_SUBSTITUTE時需要ENT_QUOTES?

[英]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_COMPATENT_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM