頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


文字コードを変えたらなぜか動かなくなった

まだよくわからないけど、とりあえずメモ。

昨日「赤ちゃんの成長曲線」の文字コードをEUC-JPからUTF-8に変更したわけですが、予想外の不具合が。
それも、全く日本語(マルチバイト)が関係ないところで。

PHPのsimplexml_load_file()でxmlファイルをいじっている部分があるので、パースがうまくできていないのかな、、、?
と思ったけどパース自体はできているみたい(ちなみにxmlファイルはUTF-8で記述)。

でも、そのオブジェクト(エレメント)がうまく評価できなくなってしまったようで。
例えば、
$xml = simplexml_load_file("hoge.xml");
$page = $xml->Items->page;

if ($page == 1){
//処理
}

なんてのがあったとすると、従来のEUC-JPならif文で意図通りに処理しててくれたのが、UTF-8にしたら動いてくれなくなりました。

型の問題なのかな?ということで
$page=(int)$page;
みたいにキャストしたら動いてくれました。

もう少し、simplexmlあたりの動作を勉強しとかないとはまりそうだ、、、



//-----------------------------------------------
追記です。

どうやら問題はやはりsimplexmlあたりの話で、simplexmlのオブジェクト同士をif文なんかで評価するのはダメみたいですね。

SimpleXML関数:PHPマニュアル
ここの例5など、ネット上にそれらしき記述がありました。

if(a == b)という形のif文があって、a,bってのはsimplexmlのオブジェクトだとすると、aかbの少なくとも1つを(string)a というようにキャストしておく必要があるようです。
もっとも、これがなぜEUC-JP上だとキャストせずに期待通りに動いていたのかはやっぱりよくわかりません。

※そういう意味では最初に書いたpageうんぬんの例は間違ってましたね(両方オブジェクトだとまずいようなので)

<< b2RevoluteJointで回転ジョイント情報を得る/設定する  TopPage  文字コードをUTF-8に変更 >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/280-26db7576




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad