3 回答

TA貢獻1789條經驗 獲得超10個贊
你所要求的是非常困難的。如果可能,讓用戶指定編碼是最好的。防止攻擊不應該更容易或更難。
但是,您可以嘗試這樣做:
iconv(mb_detect_encoding($text, mb_detect_order(), true), "UTF-8", $text);
將其設置為嚴格可能會幫助您獲得更好的結果。

TA貢獻1847條經驗 獲得超7個贊
在祖國俄羅斯,我們有4種流行的編碼,所以你的問題在這里有很大的需求。
只有符號的char代碼才能檢測到編碼,因為代碼頁相交。一些不同語言的代碼頁甚至有完整的交集。所以,我們需要另一種方法。
使用未知編碼的唯一方法是使用概率。所以,我們不想回答“這個文本的編碼是什么?”這個問題,我們試圖理解“ 這個文本最有可能的編碼是什么? ”。
俄羅斯科技博客中的一個人發明了這種方法:
在您想要支持的每個編碼中構建字符代碼的概率范圍。你可以使用你的語言中的一些大文本來構建它(例如,一些小說,使用莎士比亞的英語和托爾斯泰的俄語,哈哈)。你會得到像這樣的smth:
encoding_1: 190 => 0.095249209893009, 222 => 0.095249209893009, ... encoding_2: 239 => 0.095249209893009, 207 => 0.095249209893009, ... encoding_N: charcode => probabilty
下一個。您可以使用未知編碼的文本和“概率詞典”中的每個編碼來搜索未知編碼文本中每個符號的頻率。符號的概率概率。具有更高評級的編碼可能是贏家。更大的文本更好的結果。
如果您有興趣,我很樂意幫助您完成這項任務。我們可以通過構建兩個charcodes概率列表來大大提高準確性。
順便說一句。mb_detect_encoding certanly不起作用。是的,完全沒有。請查看“ext / mbstring / libmbfl / mbfl / mbfl_ident.c”中的mb_detect_encoding源代碼。

TA貢獻1812條經驗 獲得超5個贊
你可能已經嘗試過了,但為什么不使用mb_convert_encoding函數呢?它將嘗試自動檢測所提供文本的字符集,或者您可以將其傳遞給列表。
另外,我試圖運行:
$text = "fiancée";echo mb_convert_encoding($text, "UTF-8");echo "<br/><br/>";echo iconv(mb_detect_encoding($text), "UTF-8", $text);
兩者的結果都是一樣的。你如何看待你的文字被截斷為'fianc'?是在數據庫中還是在瀏覽器中?
- 3 回答
- 0 關注
- 543 瀏覽
添加回答
舉報