UTF-8で、preg_replace()を使ってカタカナを変換しようとしたところ文字化けが発生。
$str = 'ピーエイチピー';
$regex = '[^ピー]+';
$replace = 'ピー';
echo preg_replace("/$regex/", $replace, $str);
↓
ピー�ピー�ピー�ピーピー
調べたところ、preg系の関数(preg_match()など)はマルチバイトに対応して
[PHP-users 21761]Re: preg_replaceで文字化け
(2008/02/04 追記)
UTF-8でpreg系を使う場合は、パターン修飾子として"u"を指定すればOK。
$str = 'ピーエイチピー';参考: PHP: パターン修飾子 - Manual
$regex = '[^ピー]+';
$replace = 'ピー';
echo preg_replace("/$regex/u", $replace, $str);
↓
ピーピーピー
(追記終わり)
マルチバイトの文字列を正規表現で変換する場合はmb_ereg系(またはmb_eregi系)の関数を使わなければならない。
$str = 'ピーエイチピー';
$regex = '[^ピー]+';
$replace = 'ピー';
echo mb_ereg_replace($regex, $replace, $str);
↓
ピーピーピー
0 件のコメント:
コメントを投稿