2012-02-07 4 views
4

UTF-8の不具合について何百もの質問があると知っていますが、UTF-8 MySQLデータベースの文字に問題がある(例:éasé)

事実: 私のMySQLデータベースからを含む文字列を読み込み、それをPHPページに表示しようとしています。実際には、éとして表示されます(ただし、フォントはそれを認識せず、別のデフォルトフォントが使用されます)。文字列置換のためにPHP関数を使ってこの文字列をファイル名に変換したいときに問題が発生しました。 PHPはこれをé文字では全く認識しません。

1)文字列は、MySQLデータベースに格納されます。

は、ここで私がやっているの迅速な要約です。 MySQLサーバの設定は、次のとおり MySQLの接続照合utf8_unicode_ci内
MySQLの文字セット:UTF-8ユニコード(UTF8)
データベース自体を(により共有サーバにMyISAMストレージエンジンはなく、変更可能)照合utf8_unicode_ci内に設定されている
実際テーブルutf8_unicode_ci(InnoDB storage engine)

éがphpMyAdminで正しく表示されます。データはJavaプログラムを介してDBに挿入されますが、手動で入力したデータ(phpMyAdminに入力)でこれを試してみました。

2)PHPのdefault_charsetが設定されていない(NO VALUE)、私は共有サーバー上にあり、手動オーバーライドphp.iniを配置しても動作していないようです。 ini_set("default_charset", 'utf-8');を使用しても問題はありません。

3)実際の選択クエリを実行する前に、私はクエリSET NAMES 'utf8'を実行します。クエリ自体は無関係ですが、テストのために私は簡単なものを選択しました。SELECT title FROM items WHERE item_id = 1

4)PHPファイル自体がUTF-8でエンコードされています。私はもちろん、正しくないことがAst&Atilde;&copy;rixに変換されたソースコードをチェックし、私は返される文字列(アステリックス)上にhtmlentitiesを使用し、問題をテストするには<meta http-equiv="content-type" content="text/html; charset=utf-8" />

5)とHTMLの正しい文字セットを設定しています。したがって、文字列はブラウザにAstérixと表示されます。

可能性はありますか?私には、UTF-8に設定できるすべてのものを設定しているようです。

+0

が複製されています。それを検索します – dynamic

+1

私は明示的に私はここでこれを研究しましたが、提示された解決法のどれも(テキストの中で実際に言及したもののほとんどは)助けられませんでした。私がそれを投稿してから1分も経たないうちに実際の質問を読んでしまうと、あなたは思うことなく「別の馬鹿馬鹿しいUTF質問、DUPE」に行ったとしか思えません。ありがとう、非常に感謝:/ – janb

+0

あなたは十分な検索していない。本当に。 – dynamic

答えて

3

http://php.net/manual/en/ref.mbstring.php - マルチバイト文字列関数を参照してください。

+0

だから私は間違ったことを何もやっていないと言っているデータベースからデータを取得し、私は "ちょうど"それを処理する間違ったPHP関数を使用している? – janb

+0

あなたの言うように、すべてがUTF-8を使用するように設定されていますが、それをエコーするときはUTF-8として扱われません。 PHPは文字列の文字セットを自動的に検出しません(ISO-8859-1:Pが大好きです)。したがって、マルチバイト関数を手にする必要があります。 – Joe

+0

私はちょうどhtmlentitiesの明示的な 'htmlentities($ string、ENT_COMPAT、" UTF-8 ")'バージョンを使ってこれをチェックし、あなたの疑惑を確認します。どうもありがとう :) – janb

関連する問題