0

当社PHP Webアプリケーション(PHP 5.6.30Windows Server 2008 R2上で実行されている)で無効な文字を引き起こしUTF-8エンコーディングを使用していますが、Windows-1252を使用してエンコードされたファイルからデータをインポートする必要があります。データをインポートすると、次のようにUTF-8に変換されます。交換空きスペースは、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-8このregular expressionは破損の残留効果があったàキャラクター。これを解決しましたが、正規表現定義の末尾にuunicode modifier)を追加しました。したがって式は次のようになりました。

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

ページのエンコーディングは正しいです。