今はやりの Ajax を実行するためには、UTF-8 でコンテンツを書いた方が良い。
事実、protorype.js は、EUC-JP では動かなかった。
しかし、データベースの文字コードなどが他の文字コードの場合、運用を停止して全てのデータをコンバートする訳にもいかない。
こんな時便利なのが output_handler だ。
/etc/php.ini を、以下のように設定すると、内部文字コードはそのままで出力する文字コードを変更できる。
output_handler = mb_output_handler mbstring.http_output = UTF-8
レンタルサーバなどで、設定ファイルを変更できない場合は、PHPで設定できる。
ob_clean(); mb_http_output("UTF-8"); ob_start("mb_output_handler");
IE 対策などで header を設定している場合、以下のように修正する。
header("Content-Type: text/html; charset=" . mb_http_output());
HTML にも以下のような変更が必要だ。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xml:lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
phpで出力しているページの場合、上記の UTF-8 の部分を以下のように修正しておけば間違いない。
<?php echo mb_http_output(); ?>
post, get の値は文字コードを変換する。
mb_convert_encoding($_POST["name"], mb_internal_encoding(), mb_http_output());