スマートフォンやhtml5+CSS3など新技術に四苦八苦。jQuery、AjaxなどJavaScriptも難しいですね。そんなWebに悩む人のネタ帳です。

PHPでsubstr()を使うとマルチバイト文字が文字化ける

update : 2009/09/15

文字列を切り出す場合にはsubstr()関数を用います。
以下の例では文字列「abcdefg」の2バイト目から3バイト分の文字列を切り出すので、結果は「cde」となります。

$str = substr("abcdefg", 2, 3);


しかし、処理する対象がマルチバイトの日本語だった場合に、日本語一文字の半分の1バイトので切り出されたりすると、文字化けが発生します。
「それじゃ偶数のバイト数で切り出せば問題ない」という考えは甘く。。。とういのは、通常は「2009年」など、1バイト文字と2バイト文字が混在するケースがほとんどだからです。
さらにはUTF-8なんかは可変長なので、まずsubstr()は使えません。

そこで日本語を切り出す場合はmb_substr()関数を用いたほうがよいです。
これは文字数で指定します。以下の例だと5文字目から3文字切り出すので、結果は「09月」となります。

$str = mb_substr("2009年09月15日", 5, 3);

さらに、サーバ環境により設定されている文字コードが異なるので、確実に処理するために文字コードを指定したほうがよいかもしれません。

$str = mb_substr("2009年09月15日", 5, 3, "utf-8");
B!

Comment

Comment Form

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Monthly Archives