2016-07-09 76 views
0

我的老闆迫使我在php服務器中使用訪問mdb數據庫(是的,我是認真的)。 我可以連接它並從中檢索數據,但正如你可以想象的那樣,我對編碼有問題,因爲我想使用utf8工作。使用php編碼訪問mdb數據庫的特殊字符編碼問題

的事情是,我現在有兩個 「解決方案」 到Windows 1252轉換爲UTF-8

這是第一種方式:

mb_convert_encoding($string, "UTF-8", "Windows-1252")

它可以工作,但問題在於特殊字符未正確轉換,例如charº轉換爲\u00ba,並且charÓ轉換爲\ u00d3。

我的第二個方式是這樣做的:

mb_convert_encoding(mb_convert_encoding($string, "UTF-8", "Windows-1252"), "HTML-ENTITIES", "UTF-8") 

它也能工作,但它發生的一樣,特殊字符轉換不正確。字符被轉換爲º

有人知道如何正確更改包括特殊字符的編碼嗎? 還是有人知道如何從º\u00ba轉換爲可讀?

+1

查看相關答案[here](http://stackoverflow.com/a/28341697/2144390)。但是,請記住,使用PHP + Access + Unicode時總會存在* some *兼容性問題(例如,SQL查詢中的任意Unicode參數值將不起作用),因此您的上司可能想重新考慮他/她的詔書重新:使用這種技術組合。 –

回答

0

我終於找到了解決辦法。 我有從一開始的解決方案,但我做錯了我的測試。

我的不好。

做到這一點對我來說,正確的方法是mb_convert_encoding($string, "UTF-8", "Windows-1252")

但我檢查的結果是這樣的:

$stringUTF8 = mb_convert_encoding($string, "UTF-8", "Windows-1252"); 
echo json_encode($stringUTF8); 

這就是爲什麼它被返回的Unicode字符像\u20ac,如果我會做:

$stringUTF8 = mb_convert_encoding($string, "UTF-8", "Windows-1252"); 
echo $stringUTF8; 

我應該從一開始就看到了解決方案,但我錯了。它是json_encode()什麼是特殊字符變成unicode字符。

感謝大家的幫助!

0

我做了簡單的測試,代碼點轉換爲字母

<?php 
function codepoint_decode($str) { 
    return json_decode(sprintf('"%s"', $str)); 
} 

$string_with_codepoint = "Ahed \u00d3\u00ba\u00d3"; 
// $string_with_codepoint = mb_convert_encoding($string, "UTF-8", "Windows-1252"); 
$output = codepoint_decode($string_with_codepoint); 
echo $output; // Ahed ÓºÓ 

信貸去爲這個answer