• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:mb_strlenはマルチバイト文字数をカウントしてくれるはずですよね?)

mb_strlen関数を使用したエラーチェックで文字数判定がおかしい理由

このQ&Aのポイント
  • PHPのmb_strlen関数はマルチバイト文字数をカウントするため利用されますが、実際には半角文字の2倍のバイト数を返します。
  • 質問者は指定した100文字以内の入力を許したいのに、mb_strlen関数を使用して51文字以上をチェックしても、半角文字数で判定されるためエラーメッセージが表示されます。
  • 解決策としては、mb_strlen関数の第2引数を指定することで正しい文字数のカウントが行われるため、mb_strlen($check_data['name'], 'UTF-8')のようにUTF-8を指定する必要があります。

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

  • ベストアンサー
回答No.4

Shift-JISは文字コードの一部に¥を含むため、殆どのUNIX系サーバでは内部文字コードとして採用していないはず(EUC又はUTF-8が一般的です)なのですが・・・。 インターネット経由でのアクセスであれば、ブラウザ側の文字コードがSJISであっても、ブラウザが送信時に文字コードを変換してUTF-8(殆どこれです)を送信しているはずです。受け取ったHTTPサーバはUTFをHTTPサーバの設定ファイルで指定されているコードに変換した後、PHPへ入力文字を渡します。 PHPは受け取った文字をPHPの設定ファイルで指定してある文字コードに変換して、プログラムを実行します。 ですから、PHPの内部コードと、ブラウザで使用している内部コードは一致していないと思われます。 PHPの内部コードを確認したほうが良さそうですね。

n-yuuki
質問者

お礼

長い間、お礼を申し上げるのが遅れてしまい。 誠に申し訳御座いませんでした。 そして有難うございました。 無事、解決いたしました。 htaccseeにて、PHPの内部コードを設定して解決しました。 有難うございました!!!

その他の回答 (3)

  • memphis
  • ベストアンサー率40% (975/2395)
回答No.3

文字の判断で勘違いしていませんか? mb_strlenは、文字数を数えるのであってバイト数を数えるわけではありません。 だから”>100”としていると言うことは 日本語も含めて100文字で、バイト数で100バイトではありません。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

入力された文字のコードがSJISではないのかもしれませんね

n-yuuki
質問者

補足

既に、レンタルサーバーにファイルをアップして、 テストを何回も行っております。 そのため、ページ自体はほぼ完成し、 入力そのものも、ブラウザのテキスト入力フォームから 文字を受け取るようにしています。 その入力は、SJISでの入力にはなっていないということでしょうか?

回答No.1

>ちなみに上のコードは、>100 としつつ、出力分は50文字以内としております。 なんだかすっきりしません。 ソースコードを作成されたのはご本人ですか?

n-yuuki
質問者

補足

はい、自分でやりましたが、 でも、その考え方は、書籍を参考にしました。 書籍では、>100 となっていまして、 判定もきちっと>100で正確に100文字で判定を受けるようで、 エラー出力文も、 "100文字以内でご入力下さい" となっております。

関連するQ&A