• ベストアンサー

formに「蘭」という文字を入れると「@」と認識されてしまいます。。。

とあるフォームをつくったのですが、 「蘭」の文字を入れると、「@」もしくは「@」と認識されてしまい、 メールアドレスの入力を避けるためにいれたエラーメッセージが 出てしまいます。 文字コード等でググったのですが、判明しませんでした。 ご経験のあるかた、解決策をご存知の方がいましたら、 教えてください。 よろしくおねがいします。

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

@ (半角) と@ (全角) のどちらにマッチしてるか, わかりますか? shift_jis だと「@」が 8197 で「蘭」が 9796 なので, 「蘭」の前に「81」で終わるコードがあり, それを「@」と誤認識している可能性はないかなぁ. まあ, 最悪は /[@@]/i が /[@\x81\x97]/i と思われてるって可能性もあるはあるんですが.

phoo0529
質問者

お礼

Tacosanさん、有難うございます! 回答していただいたのをヒントに、 =~ /(@|(\x81\x97))/i に直してみたらできました! 有難うございました!

その他の回答 (2)

  • thatsthat
  • ベストアンサー率55% (15/27)
回答No.2

フォームから入って来る文字のようなので 事前に\を付ける事は出来ないかと・・・。 @を含むかどうかの判定を正しく行う必要があるのですが、 ・フォームから入って来る値(この場合は「蘭」)の  漢字コードの変換は何か行ってますか? ・@を含むかどうかの判定部分は、どんなソースになっていますか? ・お使いのperlは5.8系ですか?それ以外ですか?  (perl -vで確認できます) といった所を補足していただけると もうちょっと何か分かるかも知れません。 sjisでもunicodeでも「蘭」自体に「@」の文字コードは 含んでないようなんですよね・・・。

phoo0529
質問者

補足

thatsthatさん、回答有難うございます。 >漢字コードの変換は何か行ってますか? 変換は行っておりません。 >@を含むかどうかの判定部分は、どんなソースになっていますか? =~ /[@@]/i こんなかんじです。 >お使いのperlは5.8系ですか?それ以外ですか? はい、5.8系です。 補足してみました、、こんな感じで大丈夫でしょうか・・? 他に情報が必要でしたら言って下さい^^;

回答No.1

文字頭に\(エスケープシークエンス)を入れてみてください。 下の2行はテスト例です。 print = "蘭<br>\n"; print = "\蘭<br>\n";

phoo0529
質問者

お礼

dingo_bazzさん、有難うございます。 私も¥つければOKと、一瞬よぎったのですが、 thatsthatさんの言う感じで、フォームからの入力なので、 断念しました・・・

関連するQ&A