簡體   English   中英

防止對現有HTML實體進行編碼(轉換為&但不包括&)

[英]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 ,你也可以使用htmlentitieshtml_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));

htmlspecialcharshtmlentities支持doubleencode參數,默認情況下為true,但可以設置為false。 這也應該防止雙重編碼。 聽起來這個解決方案更清潔,但我沒有使用它,我不知道它是否有任何副作用。

我更喜歡在DB中存儲純文本。

&stay&,éstayé等...

只有在從DB讀取“匯編”HTML內容時,才使用htmlspecialchars()。

這樣我知道存儲的內容可以在任何地方使用,無論它是html還是文本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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