2017-05-23 26 views
2

我已經在一箇舊DB以下編碼希伯來語的字符串:編碼轉換從cp1255爲UTF-8

éçìéó àú ùîåàì æåñîï äòåáã á÷áåöä îòì 50 ùðä 

正在使用該字符串解碼ASP代碼如下:

function Get_RightHebrew(ByVal sText) 
    Dim i 
    Dim sRightText 

    if isNull(sText) then 
     sRightText = "" 
    else 
     For i = 1 To Len(sText) 
      If (AscW(Mid(sText, i, 1)) >= 1488 And AscW(Mid(sText, i, 1)) <= 1514) Then 
       sRightText = sRightText & Chr(AscW(Mid(sText, i, 1)) - 1264) 
      else 
       sRightText = sRightText & Mid(sText, i, 1) 
      End If 
     Next 
    end if 

    Get_RightHebrew = sRightText 

End Function 

我正在尋找一個等價的PHP函數來糾正字符串轉換UTF-8

+0

我無法將您的代碼從ASP轉換爲PHP,但可以使用PHP的mb_convert_encoding()函數。您需要將您的PHP文件保存爲不含BOM的UTF-8。 –

+0

無論如何,BOM是多餘的UTF-8,它用於文本編輯器提示Unicode編碼。 – Code4R7

+0

@KorayKüpeCP1255不支持:http://php.net/manual/en/mbstring.supported-encodings.php –

回答

2

你已經有了一個CP1255編碼字符串,但使用解碼(Latin1),所以你可以通過作弊得到你的希伯來語文本。

# mis-decoded string 
$str = "éçìéó àú ùîåàì æåñîï äòåáã á÷áåöä îòì 50 ùðä"; 

# convert to CP1252 from UTF-8 
$str = iconv("UTF-8", "CP1252", $str); 

# convert to UTF-8 by claiming $str is encoded with CP1255 
$str = iconv("CP1255", "UTF-8", $str); 

echo $str; 

這是我在網上進行了測試:https://3v4l.org/7taaN

我想與大家分享使用mb_*功能,而不是iconvCP1255不支持的示例代碼。使用字符集ISO-8859-8mb_*取而代之是一個選項,但由於它是CP1255的子集,因此可能會遇到數據丟失。

+0

好的趕上!你是如何發現它是cp1252解碼的?我也很好奇你爲什麼喜歡mb_ */iconv_ *函數? – Code4R7

+0

@ Code4R7實際上來自經驗。這是ASP中常見的錯誤。當你沒有指定CodePage時,默認情況下它通常是CP1252,但是

+0

而有選擇,謝謝您的分享,我現在看到爲什麼你''iconv''上更喜歡'mb_ *'函數。就我個人而言,我喜歡'Intl'稍微好一點,那麼在使用之前,您不必配置/覆蓋in/internal/out編碼。畢竟,當使用Unicode時,應用程序/站點可能與其他網絡一樣國際化,Intl提供各種額外的[IntlCalendar](http://php.net/manual/en/)。 class.intlcalendar.php)。 – Code4R7