2012-03-19 16 views
0

アクセント付き文字が失われています。UTF8 - > Latin1難易度、PHP

PHPから私はUTF8を使用するxmlファイルをダウンロードしました。私のPHPスクリプトはLatin1を使用しています。 UTF8をLatin1に変換することはできません。

私はこれを試してみた:

$meta=mb_convert_encoding($meta,'CP1252','UTF-8'); 

$meta=mb_convert_encoding($meta,'UTF-8'); 
$meta=mb_convert_encoding($meta,'CP1252','UTF-8'); 

しかし、アクセント付き文字が破壊され、2つの文字になっているいずれかの方法。

入力:

<title>First book of zoölogy</title> 

出力:

<title>First book of zoo?logy</title> 

私は以下の私の答えを参照してください、自分自身をそれを考え出しました。みんなあなたの助けをありがとう!

+0

サンプルの入力と出力を表示し、詳細とコードを入力してください。これはあまりにもあいまいで具体的に答えません。 – deceze

+0

入出力サンプルを追加しました。 – Alasdair

+1

そのサンプルは、最初のコードスニペットの結果を示していますか?関数に入れているテキストがUTF-8でエンコードされていると確信していますか? – deceze

答えて

1

変更テーブルの照合はUtf8_general_ciを行うと、データベースの使用にconections前:

mysql_set_charset("utf8"); 

私は、これはあなたの問題を解決することができると思います。

+0

すべてがLatin1に設定されています。これはUTF8ではなく、これを使用したいからです。私はすでにmysql_set_charsetをLatin1に設定しました。アクセント付きの文字はUTF8からLatin1に変換することができます。UTF8は使用されませんが、その後は文字が破損することがあります。 @Alasdair。 – Alasdair

+3

なぜあなたはutf8がもっと多くを提供する時にLatin1を使い続けたいのですか? – Ben

+0

バイト数が少なく、UTF8は必要ありません。 @Alasdair。 – Alasdair

0

MySQLサーバのデフォルトの文字セットは、おそらくUTF-8です。これを試してみてください:
MySQLの接続の詳細の後に次のクエリを挿入します。

mysql_query("SET NAMES latin1"); 
+0

デフォルトではlatin1で、この問題が発生しているようです文字列がデータベースに入る前に、それはPHPの問題であり、MySQLの問題ではありません。 – Alasdair

1

これはそれを修正:

$meta=iconv('UTF-8','CP1252//TRANSLIT',$meta); 

を私は仕事にだけmb_stringsがあったと思った、前のiconv知りませんでしたと、しかしiconvは非常にうまく動作します。