亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PHP:在不知道原始字符集的情況下將任何字符串轉換為UTF-8,或者至少嘗試

PHP:在不知道原始字符集的情況下將任何字符串轉換為UTF-8,或者至少嘗試

PHP
呼喚遠方 2019-07-24 10:07:26
PHP:在不知道原始字符集的情況下將任何字符串轉換為UTF-8,或者至少嘗試我有一個應用程序來處理來自世界各地的客戶,當然,我希望進入我的數據庫的所有內容都是UTF-8編碼的。對我來說主要的問題是我不知道任何字符串的來源是什么編碼 - 它可以來自文本框(使用<form accept-charset="utf-8">僅在用戶實際提交表單時才有用),或者它可能是從上傳的文本文件,所以我真的無法控制輸入。我需要的是一個函數或類,它確保進入我的數據庫的內容盡可能采用UTF-8編碼。我已經嘗試iconv(mb_detect_encoding($text), "UTF-8", $text); 但是有問題(如果輸入是'fiancée'它返回'fianc')。我嘗試了很多東西= /對于文件上傳,我喜歡要求最終用戶指定他們使用的編碼,并向他們展示輸出結果的預覽,但這對于討厭討厭的黑客沒有幫助(事實上,它可以使他們的生活更容易一點)。我已經閱讀了關于這個主題的其他SO問題,但它們似乎都有微妙的差異,例如“我需要解析RSS提要”或“我從網站上搜集數據”(或者,實際上,“你不能”)。但必須有一些東西,至少有一個很好的嘗試!
查看完整描述

3 回答

?
至尊寶的傳說

TA貢獻1789條經驗 獲得超10個贊

你所要求的是非常困難的。如果可能,讓用戶指定編碼是最好的。防止攻擊不應該更容易或更難。

但是,您可以嘗試這樣做:

iconv(mb_detect_encoding($text, mb_detect_order(), true), "UTF-8", $text);

將其設置為嚴格可能會幫助您獲得更好的結果。


查看完整回答
反對 回復 2019-07-24
?
aluckdog

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源代碼。


查看完整回答
反對 回復 2019-07-24
?
慕雪6442864

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'?是在數據庫中還是在瀏覽器中?


查看完整回答
反對 回復 2019-07-24
  • 3 回答
  • 0 關注
  • 543 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號