[英]Prevent encoding of existing HTML entities (convert & to & but not & to &)
我的mysql數據庫表中的數據有“&”之類的特殊字符。
在使用時我需要將它們轉換為&
。 我使用htmlspecialchars將它們轉換為HTML實體。
但很少有人進入&
並將它們轉換為&
我需要它們在沒有轉換的情況下使用它。
該怎么辦?
我認為最好的解決方案是先解碼它們。 正常&
將保持不變,但&
被解碼為&
。
然后再次編碼它們以將&
和其他特殊字符轉換為其編碼的等效字符。 代碼比解釋短。 :)
$text = 'Your text with &s from the database';
// Decode and re-encode the special characters.
$text = htmlspecialchars(htmlspecialchars_decode($text));
如果你還有其他實體(例如é
é
),而不是htmlspecialchars
,你也可以使用htmlentities
和html_entity_decode
。 解決方案是相同的,但您可以測試哪一個產生最佳結果。
$text = 'Your text with &s from the database';
// Decode and re-encode the special characters and other entities.
$text = htmlentities(html_entity_decode($text));
htmlspecialchars
和htmlentities
支持doubleencode
參數,默認情況下為true,但可以設置為false。 這也應該防止雙重編碼。 聽起來這個解決方案更清潔,但我沒有使用它,我不知道它是否有任何副作用。
我更喜歡在DB中存儲純文本。
&stay&,éstayé等...
只有在從DB讀取“匯編”HTML內容時,才使用htmlspecialchars()。
這樣我知道存儲的內容可以在任何地方使用,無論它是html還是文本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.