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

SAWADA Hodaka php-users@php.gr.jp
Mon, 03 Feb 2003 02:30:37 +0900


すいません、えらい回り道をしてしまって。

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

> ■実行例1
> OS Red Hat Linux 7.0.1J

を見て、

> ■実行例2
> OS NetBSD/i386 1.6

も同じように、

> ■暫定的解決方法
> phpのソースの一部を書き換える事で、一応問題を解決する事が出来ました
> ので報告します。
> 
> [php-4.2.2の展開ディレクトリ]/ext/wddx/wddx.c

> iscntrl()はロケール依存ですので、この判定を省略してみました。

と判断したあたりが落とし穴かと。

NetBSD の iscntrl(3) は ctype.h にて、

#define iscntrl(c)      ((int)((_ctype_ + 1)[(int)(c)] & _C))

となっていて locale を見てません。
NetBSD では「ワイド文字を喰わせるならば iswcntrl(3) を使え」が
美しいということでしょう。


で、場当たり的な対応としては、
ext/mbstring/mbregex.c の

#define ISCNTRL(c) (ISASCII(c) && iscntrl(c))

をまねして該当部分を isascii() && iscntrl() に書き換えると、
とりあえず「赤黒」が出るようになります。
EUC-JP に限定するならばこんなもんでいかがでしょうか。

#「赤黒」が出たり出なかったりと揺れる問題は、なんでしょうねぇ。
# あと setlocale の戻値が各種の値なのは、別に追い掛けないといけませんね。
-- 
         =^^= HODA =^^=          http://www.tail.gr.jp/~hoda/
澤田保隆@しっぽアルゴリズム情報研究所  mailto:hoda@tail.gr.jp