
よろしくお願いします。
PHPを勉強中です。
ログインページを制作していまして、ログインIDを入力し、
それのエラーチェックを行うコードに疑問を抱きました。
if($login_id == ""){
$mes[] = "ログインIDを入力してください。";
}elseif(strlen($login_id) != mb_strlen($login_id)){
$mes[] = "ログインIDは半角英数字で入力してください。";
}else{....
上記のelseif部分に、半角英数字のみ、IDの入力を受け付ける処理を
書籍の通りに制作しましたが、
実際にブラウザで完成ページからログインIDを入力すると、
全角で入力しても、エラーとはならず、そのまま処理がすすんでしまいます。
書籍の説明文では、
「文字数とバイト数が同じかどうかチェックしています。」
「同じの場合は半角文字ということになります。」
となっています・・・。
strlen()とmb_strlen()の意味も調べて理解しているつもりなのですが、なぜに全角で入力してもエラーとならないのか疑問です。
よろしくご教授くださいませ。
No.4ベストアンサー
- 回答日時:
ANo.1です。
見る限り特にマルチバイト文字関連の設定はしていないようですね。
とりあえず本件の解決のためにはmbstring.internal_encodingの値をphpファイルの文字エンコーディングと同じ値にしてやればいいでしょう。
mb_strlen()は第二引数を省略した場合、文字エンコ-ディングとして内部エンコーディングを使用するとあります。ですので内部エンコーディングがISO-8859-1では期待通りの動作をしてくれないということになります。
http://jp2.php.net/manual/ja/function.mb-strlen. …
No.3
- 回答日時:
なぜエラーなのかを考える際に
strlen($login_id)
mb_strlen($login_id)
の戻り値を調べてみると原因の解明に一歩近づけます。
例えば、
$login_id = "ログイン";
で
strlen($login_id)
の戻り値が4 ⇒ strlen()がおかしい
とりあえずこれを試してみて、原因を絞り込んでみてください。
この回答への補足
ご指導ありがとうございます。
strlen() と mb_strlen()を ”ログイン”にて戻り値を
調べたところ、
両者ともに
14
という数値になりました。
・・・・ このあとどう対処すればいいでしょうか・・・。
No.2
- 回答日時:
strlen()が、mb_strlen()としてオーバーロードされてしまっているのでしょう
http://www.php.net/manual/ja/mbstring.overload.php
半角英数チェックを行いたいのなら、入力に対して
preg_match()でチェックする方が良いです。
お礼が遅くなり申し訳ございません。
有難うございました。
オーバーロードの件ですが、
php.ini の mbstring.func_overload ディレクティブの値を確認したところ、
値は0となっていましたので、
関数strlen()がmb_strlenによってオーバーロードされていないようなんです。
やはり、半角英数チェックは、
preg_match()と、正規表現とをあわせて半角英数チェックするように
すればいいのでしょうか。
なんか今の私のレベルでは難しそうです。
また、しばらく研究してみます。有難うございました。
No.1
- 回答日時:
文字エンコーディングの問題が予想されます。
phpinfo()などでマルチバイト文字関連の設定を調べた結果はどうなっていますでしょうか。
特にmbstring.http_inputとmbstring.internal_encodingあたりの値が重要かと思います。
この回答への補足
申し訳ございません、
少し前の回答になりますが、その補足をさせてください。
phpinfoにて、確認しました。
Directive | Local Value | Master Value
mbstring.detect_order no value no value
mbstring.encoding_translation Off Off
mbstring.func_overload 0 0
mbstring.http_input pass pass
mbstring.http_output pass pass
mbstring.internal_encoding ISO-8859-1 no value
mbstring.language neutral neutral
mbstring.strict_detection Off Off
mbstring.substitute_character no value no value
上記がphpinfoの該当箇所です。
mbstring.http_inputとmbstring.internal_encoding の値をどうすればいいのでしょうか?
ちなみにですが、
文字コードの設定として、
.htaccess にて、 default_charsetの値はUTF-8に変更しています。
この件にかんしては関係ないと思いますが・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- その他(プログラミング・Web制作) 単純なコマンドプロンプトが動きません。 2 2022/04/19 15:21
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- その他(ソフトウェア) ソースネクストアプリをインストールし、製品登録で半角英数字が入力できない 5 2022/07/03 22:44
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- JavaScript javascriptで入力フォームが空欄の時にアラートによるエラーを出すコードを書いています。 2 2023/06/13 17:58
- Access(アクセス) Accessのテキストボックスの入力文字制限 1 2023/01/18 20:43
- Excel(エクセル) EXCELでの文字・数字入力の基本について教えてください。 2 2023/05/29 23:17
- Excel(エクセル) exel 漢字・英数字混在セルの入力規則 5 2022/04/03 11:08
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel関数「COUNTIF」で”文字”...
-
全角括弧と全角読点の間隔を狭...
-
文字の入力で横バー上段、中断...
-
エクセルのCOUNTIFが正しくカウ...
-
全角英数文字が嫌われる理由を...
-
メッセージボックスで1025文字...
-
Replace関数は文字数の制限ある...
-
VBAで英数字入力チェックしたい。
-
半角記号、全角記号を含む正規...
-
VBScriptである文字列に半角文...
-
エクセルでデータを30バイト...
-
全角半角変換 C++/CLI
-
PHPでMySQLに入力した半角スペ...
-
1文字のStrConv fromUnicode
-
2つ以上の連続する空白文字を除去
-
文字列中の両丸括弧を取り除くV...
-
日本語(2byte文字)の判別方法...
-
@ezweb.ne.jpについて教えて下...
-
入力データ「英数字」と「アン...
-
秀丸マクロについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字の入力で横バー上段、中断...
-
メッセージボックスで1025文字...
-
全角括弧と全角読点の間隔を狭...
-
エクセルのCOUNTIFが正しくカウ...
-
Excel関数「COUNTIF」で”文字”...
-
VBAで英数字入力チェックしたい。
-
XMLのタグ名の禁則文字
-
全角英数文字が嫌われる理由を...
-
半角記号、全角記号を含む正規...
-
2つ以上の連続する空白文字を除去
-
Replace関数は文字数の制限ある...
-
記号は半角と全角どちらがよい...
-
エクセルでの漢字、カタカナ、...
-
特定の文字を簡単な操作で半角...
-
SEO タイトルに「&」を使用
-
パソコンで全角、半角文字の切...
-
文字列中の両丸括弧を取り除くV...
-
Excel2002 一桁数字だけ全角に置換
-
IT企業の技術屋にとって全角英...
-
Phonetic関数を利用して文章中...
おすすめ情報