我一直在想我已經想出了完美的功能來解決我的問題,但我最終找到了一些沒有明顯原因的東西。我不完全理解 htmlentities / htmlspecialchars 是如何作業的,或者它們究竟轉換了什么,所以我想這會有所幫助......
我混合了新舊資料庫以及用戶輸入
-
- 舊資料庫有時在資料中使用 htmlentities() 對字符進行編碼
- 舊資料庫偶爾會在內容中包含 HTML(需要剝離)
- 新資料庫字符在插入之前未編碼
-
- 用戶輸入可能包括討厭的
<script>或<script>&lt;script/&gt; - 新資料庫字符在插入之前未編碼
- 用戶輸入可能包括討厭的
我正在嘗試創建一個包羅萬象的功能,該功能將使每個案例(#1 和 #2)既安全又具有視覺吸引力
function html_enc($text){
while($text!==html_entity_decode($text,ENT_HTML5,'UTF-8')){
$text=html_entity_decode($text,ENT_HTML5,'UTF-8');
}
$text=strip_tags($text);
$text=htmlentities($text,ENT_HTML5,'UTF-8');
return $text;
}
我以為我已經用這個函式確定了第 1 點,但是當我在頁面標題上使用它時,它的標題中有雙引號,并且頁面吐出"而不是“,但頁面的其余部分正在顯示”。 ..我不明白為什么<title>元素會與正常身體不同...有誰知道如何解決這個小問題?或者建議更好的功能/改進?
對于第 2 點,這似乎也是最好的解決方案——我還沒有通過用戶輸入破壞這個功能,以及在頁面/文本區域中的標準顯示
順便說一句,但為了安全起見;我的代碼假設用戶輸入是以 HTML 形式發布的 UTF-8,我的所有頁面都已指定
<head>
<meta charset="UTF-8"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
用戶是否可以提交不同的編碼?我想它是,這將如何影響我的功能?有可能抓住這個嗎?
uj5u.com熱心網友回復:
通過指定ENT_HTML5您已經丟失了默認標志ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401,因此不會對引號進行解碼。
您將需要ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML5或ENT_QUOTES | ENT_HTML5。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/417926.html
標籤:
上一篇:余額為0時隱藏圖表
