hnwの日記

PHPでマルチバイト対応のtrim関数を作る


(2009/06/29)追記4:本記事のmb_trim関数が動かない環境があったので、詳細を「PCREはUnicode文字プロパティをサポートするとは限らない」にまとめました。よりポータブルなmb_trim関数も紹介していますので、併せてご覧ください。



追記:「mb_ereg_match('^[\0[:space:]]+$', $str);」で、今回pregで作った正規表現'/^[\s\0\x0b\p{Zs}\p{Zl}\p{Zp}]+$/u'と同一になりました。mb_regex_encoding関数が使える分だけmb_ereg版の方が使い勝手も上です。ちょっとショック。



(2009/02/24 17:00)追記2:もっと簡潔に、「mb_ereg_match('^[\0\s]+$', $str);」でいいことがわかりました。POSIX正規表現風の表記がキモいな、と思っていたので、これは素晴らしい。参考資料:http://www.geocities.jp/kosako3/oniguruma/doc/RE.ja.txt



(2009/02/26 12:00)追記3:mb_regex_encoding関数でSJISEUC-JPを指定した場合、\sなどでは全角スペースにマッチしません。ですので、上の「追記」の内容はUTF-8専用くらいに考えた方が良さそうです。mb_ereg系関数は、Unicode系のエンコーディングとその他のエンコーディングの場合とで挙動が結構変わるようですね。


PHPtrim関数というのは、文字列の先頭および末尾にあるホワイトスペースを取り除く関数です。しかし、実際には全角空白も除去したいよね、ということがよくあります。


さらに内部エンコーディングUTF-8の場合、全角空白だけ除去すればいいのか?他にも除去すべき文字があるんじゃないか?という疑問がわいてきます。今回はそんな疑問からスタートして、マルチバイト文字もうまく扱えるtrim関数を作ってみました。

続きを読む