2010-11-30 29 views
4

ここに本当に重大な問題を抱えています。私はUTF-8ですべてを持っています、私のDBとテーブルはすべてutf8_general_ciですが、私が見ているすべての単一のPHPスクリプトはシンボルです..しかし、phpmyadminで編集すると単語が正しく表示されます。phpの文字列にutf8_decode()関数を実行すると、動作させることができますが、計画していませんここでSmysqlにutf8文字を挿入する(utf8の照合、charset、および名前セットを使用)

はこれをテストするために使用して基本的なコードのイムです:

<?php 
$conn=mysql_connect("localhost","root","root") 
    or die("Error"); 
mysql_select_db("mydb",$conn) or 
    die("Error"); 
mysql_query("UPDATE `mydb`.`Clients` SET `name` = '".utf8_decode("Araña")."' WHERE `Clients`.`id` =25;", 
    $conn) or die(mysql_error()); 
mysql_close($conn); 
echo "Success."; 
?> 

これは私であるためには混乱であり、それはそれをやってなくても動作する必要があること行うには"±AraÃ" UTF-8です

答えて

1

±AraÃ:代わりアラーナの

は、私が手に:私はデコードPHPのutf8_decode関数でUTF8を取得いけない場合。文字 "±"は、スペイン語がUTF-8でエンコードされている2バイトを表します。あなたが読んでいるものは、UTF-8を扱っていないもので、ISO-8859-1として表示しています。

4

私は同じ問題に何度も遭遇しました。時には、私が選択しているデータベースリンクのタイプが、私が挿入や他の時間に使用しているのと同じタイプではないので、それはファイルデータからデータベースになります。

後者の場合、mysql_set_charset('utf8',$link);は魔法の答えです。

mysql_select_dbでデータベースを選択した直後に、mysql_set_charsetを呼び出します。あなたが言及したDDL http://php.net/manual/en/function.mysql-set-charset.php

+2

私の一日をありがとう! – jtanmay

+0

ビールを買ってあげましょう。あなたは無限の痛みを解決したばかりです – AlBeebe

1

@ref

は照合ではなく、文字セットに関係しています。正しい文は次のようになります。

ALTER TABLE Clients CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; 

あなたはまだクライアントライブラリ(libmysqlまたは任意のドライバPHPが使用している)ことを確認する必要があり、バックISO-8859にデータをトランスコードされていません。 mysql_set_charset( 'utf8')は、明示的にクライアントエンコーディングをUTF-8に設定します。または、SET NAMES UTF8を送信することもできます。データベースに接続した直後に表示されます。これを暗黙的に行うには、my.cnf [client]ブロックを変更して、クライアントの文字エンコーディングとしてutf-8を設定します(適用するには/etc/init.d/mysql reload)。いずれにしても、クライアントが引き出している結果をマングリングしないようにしてください。

[クライアント] デフォルトの文字セット= UTF8

あなたはmbstringsを使用している場合utf8_decodeを使用する必要はありません。次のphp.iniの設定PHP側でUTF-8のサポートを確認する必要があります:

mbstring.internal_encoding = utf-8 
mbstring.http_output = utf-8 
mbstring.func_overload = 6 

を最後に、あなたがHTMLで結果を表示する際に、ページのエンコーディングを明示的にUTF-8であることを確認してください。