- ベストアンサー
formに「蘭」という文字を入れると「@」と認識されてしまいます。。。
とあるフォームをつくったのですが、 「蘭」の文字を入れると、「@」もしくは「@」と認識されてしまい、 メールアドレスの入力を避けるためにいれたエラーメッセージが 出てしまいます。 文字コード等でググったのですが、判明しませんでした。 ご経験のあるかた、解決策をご存知の方がいましたら、 教えてください。 よろしくおねがいします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
@ (半角) と@ (全角) のどちらにマッチしてるか, わかりますか? shift_jis だと「@」が 8197 で「蘭」が 9796 なので, 「蘭」の前に「81」で終わるコードがあり, それを「@」と誤認識している可能性はないかなぁ. まあ, 最悪は /[@@]/i が /[@\x81\x97]/i と思われてるって可能性もあるはあるんですが.
その他の回答 (2)
- thatsthat
- ベストアンサー率55% (15/27)
フォームから入って来る文字のようなので 事前に\を付ける事は出来ないかと・・・。 @を含むかどうかの判定を正しく行う必要があるのですが、 ・フォームから入って来る値(この場合は「蘭」)の 漢字コードの変換は何か行ってますか? ・@を含むかどうかの判定部分は、どんなソースになっていますか? ・お使いのperlは5.8系ですか?それ以外ですか? (perl -vで確認できます) といった所を補足していただけると もうちょっと何か分かるかも知れません。 sjisでもunicodeでも「蘭」自体に「@」の文字コードは 含んでないようなんですよね・・・。
補足
thatsthatさん、回答有難うございます。 >漢字コードの変換は何か行ってますか? 変換は行っておりません。 >@を含むかどうかの判定部分は、どんなソースになっていますか? =~ /[@@]/i こんなかんじです。 >お使いのperlは5.8系ですか?それ以外ですか? はい、5.8系です。 補足してみました、、こんな感じで大丈夫でしょうか・・? 他に情報が必要でしたら言って下さい^^;
- dingo_bazz
- ベストアンサー率53% (7/13)
文字頭に\(エスケープシークエンス)を入れてみてください。 下の2行はテスト例です。 print = "蘭<br>\n"; print = "\蘭<br>\n";
お礼
dingo_bazzさん、有難うございます。 私も¥つければOKと、一瞬よぎったのですが、 thatsthatさんの言う感じで、フォームからの入力なので、 断念しました・・・
お礼
Tacosanさん、有難うございます! 回答していただいたのをヒントに、 =~ /(@|(\x81\x97))/i に直してみたらできました! 有難うございました!