[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