PHPのmb_splitのバグ?(Linux環境にて)

ローカル環境

  • Windows 7 Home Premium
  • PHP 5.2.13

サーバ環境

  • さくらインターネット・スタンダード
  • FreeBSD 7.1-RELEASE-p13
  • PHP 5.2.14

で、以下のようなソース

<?php

mb_language(“japanese”);

mb_internal_encoding(“UTF-8”);

var_dump(mb_split(“\t”, “炎\tA”));

?>

ファイルの文字コードはもちろんUTF-8

で、ローカルでの実行結果

array(2) { [0]=> string(3) “炎” [1]=> string(1) “A” }

そしてサーバでの実行結果

array(1) { [0]=> string(5) “炎 A” }

工工エエェェ(゜д゜)ェェエエ工工

さくら側はsplitできてないじゃん!?

配列の長さが2にならないといけない所が、

1になっちゃっているけど!?

なんか”炎”と”A”の間にオマケで全角スペースみたいのまで入ってるし

うーん、なんかマルチバイトがうまく処理できてないようだ

ローカルではうまく分割できているので

不信に思いながらもちょっとソースを変えてみる。

<?php

mb_language(“japanese”);

mb_internal_encoding(“UTF-8”);

var_dump(mb_split(“\t”, “間\tA”))

?>

するとローカル・サーバともに

array(2) { [0]=> string(3) “間” [1]=> string(1) “A” }

と正しく出てきた。

工エエェェ(´д`)ェェエエ工

なんのこっちゃい。

“炎”はダメで”間”は良いとな。

ちなみに他で試してみたところ、”火”でもダメ。”位”では大丈夫。

ひらがなも大丈夫。

もうね、何が何やら。

Google大先生に訪ねてみても、的を得た答えが返ってこなかった。

PHPの設定が何かおかしいのかしら?

でも正しく処理されている漢字もあるので、文字コード上の

特定アドレス以降はうまく処理できないとか?

まぁ、そこまで追求しても、治らなきゃどうにもならんし、もう知らん

って事で

<?php

mb_language(“japanese”);

mb_internal_encoding(“UTF-8”);

var_dump(preg_split(“/\t/”, “炎\tA”));

?>

mb_splitはやめて、preg_splitを使う事にした。

そしたら、さくら側でもキチンと分割されるようになった。

めでたし

めでたし

細かい事は気にしたら負けですよ

2 Comments.

  1. うちは、
    mb_regex_encoding(‘UTF8’);
    で動いちゃった。

  2. 助かりました。ありがとう!