[PHP-users 12942] Re: wddxについて(一応解決)

SAWADA Hodaka php-users@php.gr.jp
Sun, 02 Feb 2003 21:21:02 +0900


At Sun, 2 Feb 2003 18:37:42 +0900,
Reiji Matsumoto wrote:

> ■テストプログラムのソース
> ---------------------------------------------
> <?php
> $locale = setlocale(LC_ALL,"ja_JP.eucJP");
> $a = "赤黒";
> $b = wddx_serialize_value($a);
> print "locale=[{$locale}]<br><xmp>$b</xmp>";
> ?>

略

> ■暫定的解決方法
> phpのソースの一部を書き換える事で、一応問題を解決する事が出来ました
> ので報告します。
> 
> [php-4.2.2の展開ディレクトリ]/ext/wddx/wddx.c
> 
> を見てみると、処理中のキャラクターコードの判別に、iscntrl()を利用して
> いました。この関数を利用し、制御コードだった場合は、<char code=XXXX />
> というパケットを作成し、そうでない場合はそのまま文字コードを出力している
> ようです。結局この部分が動作不安定のため、「赤黒」と表示される事もあれ
> ば、"<char code=XXXX>"と表示される事もあるという状態のようです。
> iscntrl()はロケール依存ですので、この判定を省略してみました。

PHP の テストプログラムの source の漢字コードはなんでしょうか。
locale を ja_JP.eucJP といいつつも source が SJIS だったりとか?

といいますのも、当方の環境 (NetBSD 1.6L) で
source を EUC で save すると「赤黒」が出ますし、
SJIS で save しますと、<char code=XXXX /> と出ます。

参考になればよろしいのですが。
-- 
         =^^= HODA =^^=          http://www.tail.gr.jp/~hoda/
澤田保隆@しっぽアルゴリズム情報研究所  mailto:hoda@tail.gr.jp