- ベストアンサー
文字変換にて
投稿文の一部を指定した文に変換する再、 『ぽいんと』とはうまく変換できましたが 『ポイント』ではうまく変換できませんでした。 変換には下記のようにしているのですが、 $aisatu1= "ぽいんと"; $henka1="指定文字"; $aisatu2= "ポイント"; $henka2 ="指定文字"; $mes =~ s/$aisatu1/$henka1/g; $mes =~ s/$aisatu2/$henka2/g; とした場合、「ぽいんと」と投稿された時に、 指定文字に変換され表示されましたが、 「ポイント」とすると、『指定文字|指定文字`』 と2重になってしまいます。 試しに、ポケットとしたら、 ポの字だけが変換されてしまいました。 どうすれば、『ポイント』がうまく指定文字に変換されるのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
perlですよね? スクリプトで日本語を扱う、特に検索や置き換えは、そのまま書いてはいけません。 日本語は2バイトで1文字ですが、何も対策をしなければ1バイト単位で扱ってしまいます。たとえば「ポイント」という文字の、「ポ」の後半と「イ」の前半の組み合わせが、他の文字と重なったり(ちょっと語弊があるかもしれませんが、たとえ話です)、制御文字が含まれていたり、などです。 詳しくは↓など参考にしてください。 http://www.din.or.jp/~ohzaki/perl.htm
その他の回答 (2)
- pchan0022000
- ベストアンサー率42% (112/261)
試したところ両方正しく変換されているようです。 $mes,$henka1,$henka2の内容も何を入れたのか書いた方がいいんじゃないでしょうか。
お礼
返答ありがとうございます。 $mes =~ s/\Q$aisatu2\E/$henka2/g; で解決できました。
- estea
- ベストアンサー率44% (39/87)
文字コードを euc などに変更してから変換するとうまくいくかもしれません。
お礼
ありがとうございます。 $mes =~ s/\Q$aisatu2\E/$henka2/g; で解決しました。
お礼
ありがとうございます。 参考URLとても助かりました。 $mes =~ s/\Q$aisatu2\E/$henka2/g; としたら、ちゃんと変換され、 ポケットとやってみてもポの字は変換されず、 ポケットとなりました。