[PHP-users 29511] Re: UTF-8、正規表現で全角スペースがヒットしないことがある?

ゆむ qqqz9b69 @ green.ocn.ne.jp
2006年 6月 26日 (月) 20:50:36 JST


手元の環境で試してみました。
WindowsXP/PHP4.4.2cli
1:あ <まっち>うえ<br />
2:あ い うえ<br />
3:あ い <まっち><br />
4:あ い <まっち><br />

WindowsXP/PHP5.1.2cli
1:あ <まっち>うえ<br />
2:あ <まっち>うえ<br />
3:あ い <まっち><br />
4:あ い <まっち><br />

FreeBSD5.4/PHP5.1.4cli
1:あ <まっち>うえ<br />
2:あ <まっち>うえ<br />
3:あ い <まっち><br />
4:あ い <まっち><br />

FreeBSD5.4/PHP4.3.9cli
1:あ <まっち>うえ<br />
2:あ い うえ<br />
3:あ い <まっち><br />
4:あ い <まっち><br />

PHP5にしろと言うことですかね…。

----
ゆむ

> -----Original Message-----
> From: php-users-bounces @ php.gr.jp
> [mailto:php-users-bounces @ php.gr.jp] On Behalf Of goungoun
> Sent: Monday, June 26, 2006 4:37 PM
> To: php-users @ php.gr.jp
> Subject: [PHP-users 29510] UTF-8、正規表現で全角スペースがヒットしないこと
がある?
>
> はじめまして。
> こちらには初投稿になります。
>
> 早速本題ですが、、
>
> 文字コードをUTF8で統一した環境で、mb_ereg_replace を使っていたところ
> 正規表現のキャラクタクラス(ex.[abcd])中に全角スペースを含む場合、意図した
通り
> に動作させることができず悩んでいます。
>
> 詳しく書いてみます、、
>
> 以下をUTF-8で保存して・・・
> # ps.文字列中の空白は全て全角スペースです。
> --------------------------------------------------------------
> --------------
> <?php
> mb_internal_encoding('UTF-8');
> mb_regex_encoding('UTF-8');
> $text = "あ い うえ";
> echo "1:" . mb_ereg_replace("い ",   "<まっち>", $text, 'i') . "<br
/>\n";
> echo "2:" . mb_ereg_replace("い[ ]", "<まっち>", $text, 'i') . "<br
/>\n";
> echo "3:" . mb_ereg_replace("うえ",   "<まっち>", $text, 'i') . "<br
/>\n";
> echo "4:" . mb_ereg_replace("う[え]", "<まっち>", $text, 'i') .
> "<br />\n"; ?>
> --------------------------------------------------------------
> --------------
>
> 実行すると以下となりました。
> --------------------------------------------------------------
> --------------
> 1:あ <まっち>うえ
> 2:あ い うえ             ←★
> 3:あ い <まっち>
> 4:あ い <まっち>
> --------------------------------------------------------------
> --------------
>
> 私は、★行が以下となることを期待していたのですが。
> --------------------------------------------------------------
> --------------
> 2:あ <まっち>うえ
> --------------------------------------------------------------
> --------------
>
>
> 考えたことを書いてみます。
>
> a."え"を使った場合は、3:に対して4:となるのに、
>   全角スペースを使った場合は、1:に対して2:になる。
>   完全に全角スペースはダメというわけではなくキャラクタクラス([]の中)
>   中に使った場合のみの問題?
>
> b.試しに、上記ソースの'UTF-8'部分を'EUC-JP'に書き換えて
>   ソース自身もEUC-JPで保存して実行すると、期待通りの動作
>   となりました。つまりUTF-8固有の問題?
>
> なお、こちらの環境は、以下の通りです。
> ・PHP Version 4.4.1-pl1 (Windows)
> ・php.ini
>     mbstring.internal_encoding EUC-JP
>
> ちなみに以下も試してみましたが、期待通りの動作
> とはなりませんでした。
>
> ・mbstring.internal_encoding を UTF-8に変更
>
> ・Linux環境
>    PHP Version 4.3.10-16
>    mbstring.internal_encoding  no value
>
>
> 何か心当たりある方はコメントお願いいたします<(_ _)>
>
>
> --
> goungoun <gounx2 @ gmail.com>
> http://goungoun.dip.jp/app/
>
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://www.php.gr.jp/php/novice.php3



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