ローカル環境
- 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を使う事にした。
そしたら、さくら側でもキチンと分割されるようになった。
めでたし
めでたし
細かい事は気にしたら負けですよ
うちは、
mb_regex_encoding(‘UTF8’);
で動いちゃった。
助かりました。ありがとう!