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