0

utf8_general_civarcharフィールドを含むInnoDBテーブルを持つMySQLデータベースがあります。PHPを介して(PEAR :: MDB2を介して)それらをフェッチし、(Smartyを介して)出力しようとすると、??? シンボル。PHPが原因である可能性が最も高いその問題を修正する方法を知りたいです。

知っておくべき良い情報:

  • これは私が取り組んでいるサイトの新しいバージョンです。SmartyもMDB2も使用していなくても、古いバージョンでも同じ問題が発生したため、原因ではない可能性があります。古いプログラマーは問題を解決するためにhtmlentities()を使用しましたが、私はそれを避けようとしています。
  • すべてのファイル(テンプレート、ソースなど)の文字エンコードは、BOMなしのUTF-8です。
  • ページを表示すると、すべてのアクセント付き文字(MySQLからのものではなく、テンプレート内の文字)が正しく表示され、ブラウザーのエンコードはUTF-8です。手動でISO-8859-1に切り替えると、MySQLの文字は正しく出力されますが、他の文字は出力されません。

基本的に、PHPまたはMySQLは、データベース内に含まれるUTF-8データをクエリ/フェッチプロセス中のある時点でISO-8859-1に変換するようです。これを修正したいと思います。

私はたくさんの検索をしましたが、解決策が見つかりませんでした。問題がどこかの設定にあることを願っています。htmlentities()またはutf8_encode()を使用する必要はありませんが、PHP6が表示されるまではそれが唯一の方法である可能性があります。

ご意見ありがとうございます!

4

2 に答える 2

1

接続にUTF-8を使用するように指示するには、いくつかのクエリを実行する必要があります(デフォルトは実際にはLatin-1です)。これが私が使用するものです:

SET CHARACTER SET = "utf8";
SET character_set_database = "utf8";
SET character_set_connection = "utf8";
SET character_set_server = "utf8";

これらのいくつかはやり過ぎに見えることを私は知っていますが、それらはテストされており、非常にうまく機能しているようです...

于 2011-01-06T15:31:30.943 に答える
0

私の推測では、データがデータベースにヒットしたとき、データはutf-8でエンコードされていませんでした。

于 2011-01-06T15:30:40.687 に答える