[PHP-users 26447] Re: mb_eregi_replaceの置換について

komura komura @ ma9.seikyou.ne.jp
2005年 8月 12日 (金) 19:12:04 JST


komura です。

On Fri, 12 Aug 2005 12:33:15 +0900
shima tetuo <mlmlml @ lily.freemail.ne.jp> wrote:

> -------------------
> テストコード
> -------------------
> <?php
>     var_dump(mb_regex_encoding());
>     var_dump(mb_internal_encoding());
> 
>     mb_regex_encoding(mb_internal_encoding());
>     var_dump(mb_regex_encoding());
> 
>     $string = "ゼンカク カタカナ";
>     var_dump(mb_ereg_replace('[^ァ-ヶ ]', '*', $string));
> ?>
> 
> -----------------
> 表示(xdebugを入れてます)
> -----------------
> 'UTF-8'
> 
> 'UTF-8'
> 
> 'UTF-8'
> 
> 'ゼンカク*カタカナ'
>         ^^^ アスタリスクになので、全角スペースとは認識されていない?

PHP 4.4.0 ですが、同様の結果になりました。
PHP 5.0.0 以降では、マルチバイト対応正規表現ライブラリが変更されている
こともありますが、全角スペースが正しく認識されることを確認しました。


> 自分の正規表現の使い方に、問題があるようにも思えますが...

詳しく調べていはいませんが、PHP 4.x のマルチバイト対応正規表現ライブラリの
バグである可能性が高いように思います。

とりあえず、今回の問題については、Perl 互換の正規表現の修飾子に u を入れる
ことで UTF-8 を扱うことができますので、preg_replace() を使用すれば対処可能
です。

$string = "ゼンカク カタカナ";
var_dump(preg_replace('/[^ァ-ヶ ]/u', '*', $string));

-- 
komura <komura @ ma9.seikyou.ne.jp>


PHP-users メーリングリストの案内