• ベストアンサー

文字変換にて

投稿文の一部を指定した文に変換する再、 『ぽいんと』とはうまく変換できましたが 『ポイント』ではうまく変換できませんでした。 変換には下記のようにしているのですが、 $aisatu1= "ぽいんと"; $henka1="指定文字"; $aisatu2= "ポイント"; $henka2 ="指定文字"; $mes =~ s/$aisatu1/$henka1/g; $mes =~ s/$aisatu2/$henka2/g; とした場合、「ぽいんと」と投稿された時に、 指定文字に変換され表示されましたが、 「ポイント」とすると、『指定文字|指定文字`』 と2重になってしまいます。 試しに、ポケットとしたら、 ポの字だけが変換されてしまいました。 どうすれば、『ポイント』がうまく指定文字に変換されるのでしょうか?

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

  • ベストアンサー
  • taseki
  • ベストアンサー率66% (155/233)
回答No.3

perlですよね? スクリプトで日本語を扱う、特に検索や置き換えは、そのまま書いてはいけません。 日本語は2バイトで1文字ですが、何も対策をしなければ1バイト単位で扱ってしまいます。たとえば「ポイント」という文字の、「ポ」の後半と「イ」の前半の組み合わせが、他の文字と重なったり(ちょっと語弊があるかもしれませんが、たとえ話です)、制御文字が含まれていたり、などです。 詳しくは↓など参考にしてください。 http://www.din.or.jp/~ohzaki/perl.htm

yuki_pon
質問者

お礼

ありがとうございます。 参考URLとても助かりました。 $mes =~ s/\Q$aisatu2\E/$henka2/g; としたら、ちゃんと変換され、 ポケットとやってみてもポの字は変換されず、 ポケットとなりました。

その他の回答 (2)

回答No.2

試したところ両方正しく変換されているようです。 $mes,$henka1,$henka2の内容も何を入れたのか書いた方がいいんじゃないでしょうか。

yuki_pon
質問者

お礼

返答ありがとうございます。 $mes =~ s/\Q$aisatu2\E/$henka2/g; で解決できました。

  • estea
  • ベストアンサー率44% (39/87)
回答No.1

文字コードを euc などに変更してから変換するとうまくいくかもしれません。

yuki_pon
質問者

お礼

ありがとうございます。 $mes =~ s/\Q$aisatu2\E/$henka2/g; で解決しました。

関連するQ&A