PHPのエラーログで文字化け


PHPのerror_log()関数でApacheのエラーログ等に日本語のメッセージを吐き出すと
\xe8\xaa\x8d\xe8\xa8\xbc\xe3\x81\xab\xe5\xa4\xb1\xe6\x95\x97\xe3\x81\x97\xe3\x81\xbe\xe3\x81\x97\xe3\x81\x9f\xe3\x80\x82といった感じに文字化けして出てくる時がある。
まぁ厳密には文字化けしている訳ではなくて、セキュリティの観点から適切にエスケープ処理してくれているだけなんだけど、デバッグ中の身としては余計なお世話だったりする。 (^^;

Apacheの環境設定をいじるとエスケープされなくなるようだけど、お客さんのとこの環境を勝手に変える訳に行かなかったり、他の表示に影響が出る場合があるのであまり環境設定をいじりたくない。

とりあえずプログラムでエスケープされた文字を復元したりしていたけど、急いでいる時はやっぱり不便。
何かいい手はないかと探していたら、perlを使って文字を復元する方法を見つけた。
それをそのままtailコマンドからパイプで繋ぐとログを流しながらちゃんと日本語が読めた!
って事で、忘れないためにメモしておこう。 φ(..)
tail -f logs/error.log | perl -nle 's/\\x(..)/pack("C",hex($1))/eg;print $_'