
よろしくお願いします。
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で質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでの漢字、カタカナ、...
-
メッセージボックスで1025文字...
-
文字の入力で横バー上段、中断...
-
エクセルのCOUNTIFが正しくカウ...
-
Excel関数「COUNTIF」で”文字”...
-
VB.net テキストボックス半角文...
-
Replace関数は文字数の制限ある...
-
全角英数字のみ半角英数字にす...
-
全角括弧と全角読点の間隔を狭...
-
XMLのタグ名の禁則文字
-
半角スペースを全角スペースに
-
VBのソース検索で、コメントア...
-
Thunderbirdでのアドレスの表記...
-
バッチファイル 全角検索
-
VBAのコマンドボタンの文字列の...
-
ソースコードの1行が長いとき...
-
テキストファイルから改行コー...
-
エスケープ文字の復帰(¥r)と...
-
VBAでCSVをExcelに取り込む時に...
-
jsp 改行コードで改行させて表...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字の入力で横バー上段、中断...
-
メッセージボックスで1025文字...
-
Excel関数「COUNTIF」で”文字”...
-
エクセルのCOUNTIFが正しくカウ...
-
全角括弧と全角読点の間隔を狭...
-
特定の文字を簡単な操作で半角...
-
エクセルでの漢字、カタカナ、...
-
VBAで英数字入力チェックしたい。
-
XMLのタグ名の禁則文字
-
Phonetic関数を利用して文章中...
-
全角英数文字が嫌われる理由を...
-
半角記号、全角記号を含む正規...
-
半角スペース の文字化け...
-
Replace関数は文字数の制限ある...
-
パソコンで全角、半角文字の切...
-
記号は半角と全角どちらがよい...
-
2つ以上の連続する空白文字を除去
-
文字列中の両丸括弧を取り除くV...
-
バッチファイル 全角検索
-
半角英数文字を全角英数文字に...
おすすめ情報