[PHP-users 35568] 意図しない文字置換について

aug721 @ gmail.com aug721 @ gmail.com
2011年 5月 18日 (水) 15:53:22 JST


置換結果に関する相談です。

$str = '樫';
$str=str_replace('~','〜',$str);
echo $str;

を実行すると、

Shift-JIS→ 梶`
UTF-8→ 讓ォ

という結果になり、「樫」が違う文字に置換されてしまいます。

これは、Shift-JISの場合、
「樫」の文字コード→ 8A7E
「~」(チルダ)の文字コード→ 7E
という文字コードが原因になります。

そこで、
$str=str_replace('~','〜',$str);
の部分を
$str=mb_ereg_replace ('~','〜',$str);
に変更すると、

Shift-JIS→ 樫
UTF-8→ 讓ォ

となり、Shift-JISでは正しい結果が得られます。
Shift-JISを利用しているので、結果としては問題ないのですが、下記の二点について教えて下さい。
1.この方法で正しいのか?(他に方法はないのか?)
2.UTF-8の場合どうすれば良いのか?

文字に関係しそうなphp.ini設定は以下になります。

[PHP]
magic_quotes_gpc = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off
default_charset = "Shift_JIS"
extension=php_mbstring.dll

[mbstring]
mbstring.language = Japanese
mbstring.internal_encoding = SJIS
mbstring.http_input = pass
mbstring.http_output = SJIS
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none

以上、よろしくお願いします。

オカムラ


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