0

我們PHP Web應用程序(PHP 5.6.30Windows Server 2008 R2運行)使用UTF-8編碼,但需要從正在使用Windows-1252編碼的文件導入數據。數據導入時,按如下所示轉換爲UTF-8更換用的preg_replace空白導致無效字符,UTF-8

iconv('Windows-1252', 'UTF-8', $value); 

當我們導入下面的示例數據,轉換正常工作的大部分Windows-1252字符,但在下面第8行中,à字符給出的問題和不正確轉換。

1;€ 
2;é 
3;è 
4;ë 
5;ï 
6;ä 
7;á 
8;à 
9;ç 
10;ß 
11;ø 
12;í 
13;ì 
14;ñ 
15;@ 
16;û 

下面是顯示在網站上顯示此數據的結果的屏幕截圖。

enter image description here

有誰知道爲什麼PHPiconv沒有正確轉換à人物?

+0

'$ this-> encoding'的臨界值是? –

+0

@MarkBaker對不起,該值是'Windows-1252'。將更新問題以反映這一點。 – BruceHill

+0

您是否嘗試過使用標題編碼?或'iconv_set_encoding'? –

回答

1

我解決了這個問題,它最終與iconv無關,就像我最初的想法。需要的變化是如此小的變化,只有一個字符,但花了很長時間才找到這個變化。事實證明,有問題的聲明實際上是以下情況:

preg_replace('/\s+/', ' ',$columnvalue)) 

這個正則表達式的目的是從價值刪除空白,但因爲編碼爲UTF-8regular expression有破壞à的剩餘效應字符。我解決了這個問題,但在正則表達式定義的末尾添加了uunicode modifier)。所以表達式變成:

preg_replace('/\s+/u', ' ',$columnvalue)) 

然後頁面的編碼是正確的。