1

私はPHPに奇妙な問題を抱えています。うまくいけば、誰かがこれを以前に見たことがあるでしょう。

utf8に設定されているMySqlデータベースにÆ文字(AE)を保存しています。ローカルマシン(Windows 7)のブラウザーで文字を正しく表示するPHPアプリケーションがありますが、同じコードとデータベースが本番環境(GoDaddy Linux Hosting)で使用されている場合、文字は単一のASCII文字に変換されます( 198)、これは黒い三角形の中に恐ろしい質問マークとして表示されます。データベースとコードが両方の場所でまったく同じであることを確認しました。バイトを配列として反復処理すると、MySqlから出力されるのは2バイト、\ 195 \ 134であることがわかりますが、PHPが送信するものは、実稼働環境で何らかの形で単一の198に変換されています。

文字エンコードに関するブラウザの問題を除外しました。utf8エンコーディングを使用すると、すべてのブラウザーで同じ動作が得られます。生の応答を見て、問題を確認できます。

4

2 に答える 2

1

もしも

UTF8: \xC3\x86 (195 134) - LATIN CAPITAL LETTER AE (U+00C6)

に変換され198、次のように解釈されるようです。

ISO-8859-1       \xC6 198    UTF8: \xC3\x86        LATIN CAPITAL LETTER AE (U+00C6)
ISO-8859-4       \xC6 198    UTF8: \xC3\x86        LATIN CAPITAL LETTER AE (U+00C6)
ISO-8859-9       \xC6 198    UTF8: \xC3\x86        LATIN CAPITAL LETTER AE (U+00C6)
ISO-8859-15      \xC6 198    UTF8: \xC3\x86        LATIN CAPITAL LETTER AE (U+00C6)
Windows 1252     \xC6 198    UTF8: \xC3\x86        LATIN CAPITAL LETTER AE (U+00C6)
Windows 1254     \xC6 198    UTF8: \xC3\x86        LATIN CAPITAL LETTER AE (U+00C6)
Windows 1258     \xC6 198    UTF8: \xC3\x86        LATIN CAPITAL LETTER AE (U+00C6)

これらのいずれかを選択してください。すべて、LATIN CAPITAL LETTER AEコードポイント198の小数に一致します。

PHP出力のエンコーディング設定と、すべてがUTF-8としてセットアップされているデータベースクライアント接続を確認してください。

于 2012-04-17T01:04:04.733 に答える
0

PDO 接続が原因ではないかと疑っていましたが、初期化コードでカバーされていると思いました。結局のところ、すべてのプラットフォームで機能するわけではありません。「set names 'utf8'」を PDO 属性として追加するだけでなく、(または代わりに) PDO 参照を使用する前にコマンドでクエリを実際に実行する必要があります。

// This doesn't seem to work on all platforms
$pdo->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");

// This seems like a hack, but it works on GoDaddy Linux Hosting
$sth = $pdo->prepare("set names 'utf8'");
$sth->execute();
于 2012-04-17T01:24:19.363 に答える