phpでちょこっとmashupしたいときにUTF-8に文字コード変えたいけど不定期なので忘れるからメモ

UTF-8が多いから。
こうやって書いとけば内部文字コード気にせず組める。

/**
 * 出力する文字コードをUTF-8に
 */
mb_internal_encoding("EUC-JP");
mb_http_output( "UTF-8" );
ob_start("mb_output_handler");

string mb_output_handler ( string $contents, int $status )

mb_output_handler() は、 ob_start() のコールバック関数です。 mb_output_handler() は、出力バッファの文字を 内部文字エンコーディングから HTTP 出力文字エンコーディングに変換します。

ob_start()で内部バッファに保存された内容が、出力されるときにmb_output_handler()を通ります。mb_output_handler()は、mb_http_outputで指定された文字コードに変換して出力します。ということで、上記のように記述しておけば、出力文字コードへの変換を気にせずにPHPのコードを書けるわけですね。


ただし、画像ファイルを送信するときは、先にheaderを送信するか、mb_http_outputでこちょこちょする必要があるみたいです。そうしないと、画像もテキストと解釈されて、文字コード変換されてしまうようです。

注意: PHP 4.3.0 以降において、 イメージのようなバイナリデータを PHP スクリプトから出力したい場合、 バイナリデータを送信する前に header() により Content-Type: ヘッダ(例:header("Content-Type: image/png"))を 送信する必要があります。Content-Type: ヘッダが送信されると出力文字 コード変換は無効となります。

ただし、header() により"Content-Type: text/*" を送信した場合には、テキストが送信されるとみなし、文字コード設定に 基づいて出力文字コード変換を行います。

なお、PHP 4.2.x あるいはそれ以前のバージョンで画像のようなバイナリデータを 出力する場合には、mb_http_output() を用いて 出力エンコーディングを "pass" に設定する必要があります。