我使用我的網站上htmlspecialchars()
顯示來自用戶狀態後。 狀態信息正被保存到我的數據庫中,並顯示在他們的時間表中。如何允許和符號使用時用htmlspecialchars()
我使用laravel 5.3
的問題是,如果有人張貼類似:Netflix & Chill
,這變成Netflix & Chill
我怎麼能仍然使用htmlspecialchars()
,這樣我可以保持我的網站安全,但仍顯示正確的文本,而不是轉向,甚至象徵&
到&
我使用我的網站上htmlspecialchars()
顯示來自用戶狀態後。 狀態信息正被保存到我的數據庫中,並顯示在他們的時間表中。如何允許和符號使用時用htmlspecialchars()
我使用laravel 5.3
的問題是,如果有人張貼類似:Netflix & Chill
,這變成Netflix & Chill
我怎麼能仍然使用htmlspecialchars()
,這樣我可以保持我的網站安全,但仍顯示正確的文本,而不是轉向,甚至象徵&
到&
應該顯示正確的文本。
我已經看到了你所描述的是雙編碼的最常見原因。 (通過htmlspecialchars
傳遞字符串的兩倍。)例如,
$str = 'Netflix & Chill';
如果使用echo htmlspecialchars($str)
,你會看到「Netflix的&冰寒」在瀏覽器中。但是,如果您使用echo htmlspecialchars(htmlspecialchars($str));
代替,則會在瀏覽器中看到跳過的&符號。 (如果您查看網頁的源文件,它實際上Netflix & Chill
的。)
你可能會不經意地這樣做,如果你正在使用的自動轉義輸出的模板。我注意到你用Laravel標記了這個問題,而刀片模板就是這樣做的。在這裏看到the documentation:
刀片
{{ }}
語句通過PHP的用htmlspecialchars自動發送功能,以防止XSS攻擊。
如果這就是您用來顯示數據的內容,則在將值發送到模板之前,不應使用htmlspecialchars
。
htmlspecialchars
原始ASCII字符轉換成它的HTML實體。這意味着,他們仍然會被正確的頁面(即一個<
符號仍然會出現如<
在頁面上)上呈現,但不會有任何HTML特殊的意義。
因此,在數據庫,他們將顯示爲entity codes,但是當顯示到頁,用戶將能夠看到他們爲他們輸入的首字符。
如果你需要保留數據庫中的字符(我不知道爲什麼你需要),你可以考慮用homoglyphs來代替它們,因爲它們保留了它們在數據庫中的外觀,並且保護你的HTML不是如果您僅使用htpspecialchars
,則可能。
HTML將其解釋''&並將其顯示爲'&',或者是你,否則經歷?也許你在字符串上使用這個函數兩次?你是在輸出中使用它,還是輸入到數據庫中? – Qirel