• ベストアンサー

ereg_replaceの文字化け

すみませんが、どなたか教えて下さい。 漢字をひらがなにしたいと思い、 SJISファイルの以下のソースで、 mb_internal_encoding('SJIS'); mb_regex_encoding('SJIS'); $str = "除かれた"; echo ereg_replace("除[かきくけこ]","のぞ",$str); 結果を「のぞかれた」となるようにしたいのですが、 上記だと、「のぞゥれた」となってしまいます。 どうすれば直せるか分かる方はいらっしゃるでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • wp_
  • ベストアンサー率54% (132/242)
回答No.2

自己突っ込み失礼 確認したら駄目だったorz $str = "除かれた"; echo mb_ereg_replace("除([かきくけこ])","のぞ\\1",$str); 上記だと上手く行きます。$参照はpreg系だけですね。 ちなみにsjisだと5C問題のせいでこのまま適用するとハマるかも知れません。 ご留意を。

esan_2008
質問者

お礼

ありがとうございます。 こちらでも確認しましたが、 echo mb_ereg_replace("除([かきくけこ])","のぞ\\1",$str); で期待する結果となりました。 マニュアルも同じところを読んでいるのですが、\\1にすると、なぜ うまくいくのかは、まだ分かっていません。 これについては死にそうな仕事を片付けたあと、あとでゆっくり調べるつもりでおります。 感謝いたします。 ありがとうございました。

その他の回答 (1)

  • wp_
  • ベストアンサー率54% (132/242)
回答No.1

何故mb系関数を設定しているのにereg系を使うのか^^;; まにゅある mb_ereg_replace() http://jp.php.net/manual/ja/function.mb-ereg-replace.php とりあえず全編42回読みましょう。 あと正規表現の使い方が違います。 echo mb_ereg_replace("除[かきくけこ]","のぞ",$str); 多分「のぞれた」になるんじゃないですかね。 echo ereg_replace("除([かきくけこ])","のぞ$1",$str); こんな感じかなぁとおもいます。 確認してませんが。