[PHP-users 29510] UTF-8、正規表現で全角スペースがヒットしないことがある?
goungoun
gounx2 @ gmail.com
2006年 6月 26日 (月) 16:36:57 JST
はじめまして。
こちらには初投稿になります。
早速本題ですが、、
文字コードを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 メーリングリストの案内