UTF-8 : してログ

今まで、BOM 付き UTF-8 のテキストデータを扱う時、substr($str,3) とかで BOM を取り除いていたのですが、これだと BOM 無しの UTF-8N ではデータまで削ってしまいます。どちらでもうまく処理できるように、正規表現で書き直してみましたので今度からはこちらで行きます。

$str = preg_replace('/^\xEF\xBB\xBF/','',$str);

なお、PHP コード自体は BOM 無しの UTF-8N で書く必要があります。普段 UTF-8N で保存できるエディタを使用していても、本番環境などでうっかり Windows のメモ帳なんかで編集してしまうと、予期せぬエラーを招くので要注意です。

これめんどくさいから言語のほうで吸収してくれんかなと、ときどき思います。それか、UTF-8 と UTF-8N をはっきり区別して扱えるようにしてほしい。せっかく文字コードで悩まなくて済むようになったはずなのに、こういう混乱を招く仕様をなぜ入れてしまったのだろうか。

PHP ソースコードの標準的なエンコーディングは UTF-8 になっており、そのまま記述すればどのような記号も問題ないはずです。しかし、使っているエディタによっては文字化けしたりしますので、一般的な記号以外はあまりお勧めしません。こういった文字は「\uXXXX」のようなコードポイント数値表現を json_decode でデコードすることで記述できます。

「♥」を記述したいとき
json_decode('"\u2665"')