掲示板をPerlで作成してもらい、社内で使っておりますが、ユーザーIDに『ー』(例えばカードの2文字めの伸ばす文字)を使用すると、登録時は問題ないのですが、ログイン時の認証でCGIのエラーとなります。

掲示板を作って頂いた方に伺うと、
**********************************
表示は問題ないのですが、Perlの一部の関数
(おそらく正規表現を使用できる文字列操作関数)で
「ー」という文字を使うとエラーになるようです。
**********************************
という分析を頂いております。

この問題の解決方法はございませんでしょうか。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

全角の「ー」であればSJIS表現で送信されてきた場合、2バイト目がブラケットなので正規表現関数系で引っかかりますね。


対処方法としては
1、エスケープする
2、コード体系を変更し、引っかからないものにする
という方法があります。
一般的には2の方法、つまり下記でlucky111さんが提示されている方法を使うのですが、その場合、半角でブラケットやハイフンなど正規表現でのメタキャラクタがある場合にもうまく通らなくなってしまいます。
なので
・本当に正規表現関数評価が必要かもう一度チェックして必要無いのであれば、通常の文字列検査に変更する。
・ヤバそうな文字は全部エスケープする。
等の方法を取った方が良いでしょう。
    • good
    • 0

jcode.plを使えば解決できます。



グーグルなどで探せば、どこかに落っこちてると思うので、それを、プログラムと同じフォルダに入れ、(パスが通っていればどこでも構いません)例えば$idにIDが入っていれば、

require 'jcode.pl';
&jcode'convert(*id,'euc');

とすれば、$idがEUCになるので、「ー」でエラーになりません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング