[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 メーリングリストの案内