2017-08-29 53 views
0

我想將字符串轉換爲UTF-8。問題是有些字母由兩個八位字節的二進制代碼組成,大部分是一個八位字節的二進制代碼。將混合文本轉換爲UTF-8

這裏有一個例子:

echo $title; # Shuttle XPС slim C 

echo Encoding::fixUTF8(Encoding::toUTF8($title)); # Shuttle XP? slim C 

現在,如果你轉換成二進制就可以看到問號c字符看起來二進制不同的字符串:

S = 01010011 
h = 01101000 
u = 01110101 
t = 01110100 
t = 01110100 
l = 01101100 
e = 01100101 
    = 00100000 
X = 01011000 
P = 01010000 
C = 11010000 10100001 
    = 00100000 
s = 01110011 
l = 01101100 
i = 01101001 
m = 01101101 
    = 00100000 
C = 01000011 

所以問題是,一個'C'是'11010000 10100001',一個'C'是'01000011'。這發生在許多不同的字母上。有沒有辦法解決這個問題?

在此先感謝!

+0

退房,它可能會有所幫助。 https://stackoverflow.com/questions/21322702/what-is-the-best-way-to-handle-remove-utf-8s-right-to-left-override-characters –

+0

僅供參考:「toUTF8' 「沒有指定*和」'fixUTF8'「(甚至是什麼意思?)是絕對無稽之談。 – deceze

回答

2

所有文本已經UTF-8編碼,這無關的問題。問題是,「C」實際上是「C」,即U + 0421 CYRILLIC CAPITAL LETTER ES。這是完全錯誤的性格,只是看起來像拉丁語「C」。您無法通過編碼轉換來修復該問題,您需要通過將信件替換爲您需要的實際信件來解決該問題。這可以是相當手動的,除非你能想出一個角色列表來查找和替換。

-1

爲什麼要管理兩個八位字節?,可以試試這個;

下C = 01100011

上C = 01000011