[英]PHP htmlentities and htmlspecialchars are breaking my strings
我的應用程序中有一個description字段,如果我添加了這樣的引號:“它將破壞所有內容。 我在整個說明字段上都使用了htmlentities(),因此我嘗試了htmlspecialchars(),但它也壞了。
在下面的屏幕截圖中,我發送了字符串“我希望它能正常工作”,並引起關注
我過去曾遇到過此問題,但不確定如何解決。
我通過更改代碼來解決了這個問題
$text = htmlentities( $text, ENT_QUOTES );
至:
$text = htmlentities( $text, ENT_QUOTES, 'utf-8' );
這很奇怪,因為PHP將默認設置列為utf-8。
如果只需要替換某些字符,我有時會創建一個簡單的查找和替換腳本。
<?php
$bad = array('’', '&'); // add whatever you don't want here
$good = array('’', '&'); // replace it here
$description_field = str_replace($bad, $good, $description_field);
?>
我很確定htmlentities
和htmlspecialchars
不是UTF-8安全函數。 他們將Unicode字符的第一個字節視為要編碼的HTML實體,然后當瀏覽器讀取所謂的UTF-8內容時,它會看到一個HTML實體,后跟兩個無效字節。
您可能需要研究mb_ereg_replace
功能並手動替換不安全的字符:
$output = mb_ereg_replace("/</","<",$input);
這就是使字符串成為HTML安全字符串所真正需要的。 我似乎找不到一個多字節安全的str_replace
,但這也可以正常工作,它將確保您永遠不會遇到UTF-8字符的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.