PHPのerror_log関数で日本語が文字化け

php
スポンサーリンク

環境

  • php 5.4

事象

PHP で error_log() 関数を使って日本語をエラーログに出力しようとすると、
出力された日本語部分が以下のような感じになり、読めなくなる

<E3><81><8C><E5><AD><98><E5><9C><A8><E3><81><97><E3><81><BE><E3><81><9B><E3><82><93><E3><80><82><E3><82><A8><E3><83><A9>
<E3><83><BC><E3><83><9A><E3><83><BC><E3><82><B8><E3><82><92><E7><94><9F><E6><88><90><E3><81><97><E3><81><BE><E3><81><99><E3><80><82>

原因

文字化けしている訳ではなくて、セキュリティの観点から適切にエスケープ処理してくれているだけなんだけど、

ということらしー。

対応

出力はされたものは以下のperlコマンドをパイプで繋いで見ると、閲覧できる。

tail -f logs/error.log | perl -nle 's/\\x(..)/pack("C",hex($1))/eg;print $_'

引用元

あざっしたー

コメント