[PHP-dev 517] Re: [Fwd: Japanese: mb_split broken?]
Moriyoshi Koizumi
php-dev@php.gr.jp
Wed, 02 Oct 2002 05:52:40 +0900
小泉です。
mb_split() と mb_ereg() の正規表現は拡張モードのものとして扱われるので、
$comps = mb_split( ' ', 'a b c d e' );
や
$comps = mb_split( "\n", "a\nb\nc\nd\ne" );
としても、正しい結果は得られません。
' ' '\r' '\n' '\f' '\t' がだめですね。
代わりに、
$comps = mb_split( '[[:space:]]', 'a b c d e' );
とやると、期待通りの結果を得られます。
mb_ereg_replace() も同様に、デフォルトでは拡張モードですので、
<?php echo mb_ereg_replace( ' ', '-', 'a b c d e' ); ?>
とやると、妙な結果を得ます。
<?php echo mb_ereg_replace( ' ', '-', 'a b c d e', '' ); ?>
とすると大丈夫です。
これは、ドキュメントの問題のような気がします。
しかし、分かりにくすぎるので、そもそも拡張モードの挙動を
変更した方がいいと思うのですが、どうでしょうか?
以下のような感じです。
Index: mbregex.c
===================================================================
RCS file: /repository/php4/ext/mbstring/mbregex.c,v
retrieving revision 1.9
diff -u -r1.9 mbregex.c
--- mbregex.c 28 Aug 2002 02:08:57 -0000 1.9
+++ mbregex.c 1 Oct 2002 20:49:57 -0000
@@ -2442,6 +2442,7 @@
}
goto normal_char;
+#if 0_moriyoshi
case ' ':
case '\t':
case '\f':
@@ -2449,6 +2450,7 @@
case '\n':
if (options & MBRE_OPTION_EXTENDED)
break;
+#endif
default:
normal_char: /* Expects the character in `c'. */
Yasuo Ohgaki <yohgaki@ohgaki.net> wrote:
> 大垣です。
>
> 使っていないので気が付きませんでしたがmb_split()
> 壊れているらしいです...
>
> # テストスクリプトが必要ですね...
>
> -------- Original Message --------
> Subject: Japanese: mb_split broken?
> Date: Tue, 01 Oct 2002 22:36:24 +0900
> From: jean_christian@myrealbox.com (Jean-Christian Imbeault)
> To: php-i18n@lists.php.net
> Newsgroups: php.i18n
>
> mb_split appears to be broken in 4.2.3. I have submitted a bug report
> but in the mean time ... my app is broken and I badly need a fix :(
>
> Can anyone recommend a way for me to split japanese strings on white space?
>
> I need this for user entered search string, which are space delimited.
>
> Thanks.
>
> Jc
>
>
> _______________________________________________
> PHP-dev mailing list
> PHP-dev@php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-dev