現在のページ

HOME » ID-Blogger » テクノロジー » トラブルシューティング » PHP+MySQLで日本語文字化けへの対処

PHP+MySQLで日本語文字化けへの対処

最近、家に帰るのが2日おきです…もう会社のソファで寝るのも慣れました。トホホw

PHP+MySQLでシステム構築中なんですが「MySQLからデータを取り出し→PHPで成型→XML出力」みたいな流れが必要になってきてしまいました。ところが組み上げたPHPプログラムをブラウザで参照すると、日本語部分が文字化けの嵐!
通常使用ブラウザはFireFoxなんで上記の現象はGecko系の場合ですが、Internet Explorer(IE)で参照すると

XML ページを表示できません
XSL スタイル シートを使用した XML 入力は表示できません。エラーを訂正してください。 〜 テキストの内容に無効な文字が見つかりました。リソース 'http://www.○○○○.jp/○○○○.php' の実行エラーです。
ライン ○○、位置 ○○
といったエラーが表示されます。

結果から言ってしまうと原因は文字エンコードの混在にありました…。

MySQLのデータ管理ページの文字エンコードをEUC-JPで作っていたため、レコードのデータはEUC-JPで書き込まれているのですが、これを取り出してXML形式で出力する際に、諸々の事情によりどうしてもUTF-8で出力しなければならず、2つの文字エンコードの混在状態が発生しておりました。

例えばXML出力するPHPとしてはこんなカンジでしょうか

<?
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Content-type: application/xml");
//XML表示
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
echo "<data>\n";
$db=mysql_connect("サーバ名","ID","DBパス");
mysql_select_db("DB名");
$result = mysql_query("SELECT * FROM テーブル");
while ($arry=mysql_fetch_array($result)){
echo "<title>$arry[title]</title>\n"; ←ココの出力時にエラーが出てしまう
}
echo "</data>\n";
?>

実はここを解決するために丸1日費やしたのですが…ググってみると同じような悩みの方はたくさんおりまして、対処方法もたくさん出てたんですがどれも決定的な解決法は提示されていませんで、結局自分が出した結論は単純に出力する文字エンコードを統一してあげれば良いという事で「mb_convert_encoding()を使ってムリムリ文字コード変換をかまる」という所に落ち着きました。
上記のコードに組み合わせると
<?
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Content-type: application/xml");
//XML表示
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
echo "<data>\n";
$db=mysql_connect("サーバ名","ID","DBパス");
mysql_select_db("DB名");
$result = mysql_query("SELECT * FROM テーブル");
while ($arry=mysql_fetch_array($result)){
echo "<title>".mb_convert_encoding($arry[title],"UTF-8","EUC-JP")."</title>\n";
}
echo "</data>\n";
?>
という風にすれば問題解決いたしました!

まあMySQLとかXMLとか関係ナシに、最初からキチンと文字コード管理を徹底していればこういう問題は発生しにくいとは思うのですが、構築していくうちに…ねえ?試行錯誤の中にはいろいろあるんですよw
インターネット技術のグローバル化が進んできていますので、Web系で制作するならこれからは「UTF-8」で文字コードは統一するのが自然な流れなのかもしれませんね〜。

トラックバック

このエントリーのトラックバックURL:
http://www.infinity-dimensions.com/blog/mt-tb.cgi/226

コメント (1)

KZK:

勉強(∵)/
勉強/(∵)

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

コンテンツメニュー

カテゴリー

Add