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

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

show5-loveの回答

回答No.1

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

n-yuuki
質問者

補足

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

関連するQ&A

  • 半角英数字の判定:strlen()とmb_strlen() について

    よろしくお願いします。 PHPを勉強中です。 ログインページを制作していまして、ログインIDを入力し、 それのエラーチェックを行うコードに疑問を抱きました。 if($login_id == ""){ $mes[] = "ログインIDを入力してください。"; }elseif(strlen($login_id) != mb_strlen($login_id)){ $mes[] = "ログインIDは半角英数字で入力してください。"; }else{.... 上記のelseif部分に、半角英数字のみ、IDの入力を受け付ける処理を 書籍の通りに制作しましたが、 実際にブラウザで完成ページからログインIDを入力すると、 全角で入力しても、エラーとはならず、そのまま処理がすすんでしまいます。 書籍の説明文では、 「文字数とバイト数が同じかどうかチェックしています。」 「同じの場合は半角文字ということになります。」 となっています・・・。 strlen()とmb_strlen()の意味も調べて理解しているつもりなのですが、なぜに全角で入力してもエラーとならないのか疑問です。 よろしくご教授くださいませ。

    • ベストアンサー
    • PHP
  • 文字型データのバイト数をカウントするには

    Java Scriptで文字型データのバイト数をカウントする関数は何でしょうか? PHPでいうmb_strlen()のようなものです。 どうぞよろしくお願いいたします。

  • phpでマルチバイトを含む文字列のバイト数を求めることは可能でしょうか?

    例として次のような文字列のバイト数を求めたいです。 あaいbc54うえ strlenは正確にバイト数が返ってきませんでした。 mb_strlenでは文字数が返ってきてしまうため、使えません(あくまでもバイト数です。) 結果個人的にmb_strwidthを使うことに行き着いたのですが、mb_strwidthは文字幅を評価する関数と表記されていました。 何パターンか実際にテストしてみた結果mb_strwidthでも動作に支障はなかったのですが、mb_strwidthを使うという方法で 正しいのでしょうか? もし、バイト数を数えるよい方法がございましたら教えていただきたいです!よろしくお願いします。

    • 締切済み
    • PHP
  • 文字数を、正しくカウントできない(PHP使用)

    現在私が使用しているホスティングサービスの環境では 以下の現象ですが、カッコ内の値を求めたいのですが、 どう対処すれば実現できるでしょか。 (1) 日本語4文字をカウントした時、 mb_strlen()関数で、12が戻る。(4文字) strlen()関数で、12が戻る。(8バイト) (2) 英数字4文字をカウントした時、 mb_strlen()関数で、4が戻る。(4文字) strlen()関数で、4が戻る。(4バイト)

    • ベストアンサー
    • PHP
  • 空文字のエラーチェック(問い合わせフォーム)について

    宜しくお願いします。 書籍を参考にして、PHPにて問い合わせフォームを作成しております。 初心者のレベルです。 問い合わせフォームに入力されたデーターの、 エラーチェック処理について、1点不明なところがあり、質問させて頂きます。 コメント入力欄があり、そこは1000文字以内で必須入力してもらいます。 そのためエラーチェックとして、下記のコードが書籍にあります。 function erro_check($check_data){ if(isset($check_date["comment"]) && $check_date["comment"]= = ="") {   $error_list[ ]="コメントを入力してください。";  }elseif(trim($check_date["comment"]) = = =""){ $error_list[ ]="コメントを入力して下さい。";  }elseif(mb_strlen($check_date["comment"]) > 1000){     $error_list[ ]="コメントは1000文字以内で入力してくださ     い。";  }  return $error_list; } 空文字入力のチェックが二度にわたって行われているような気がします。最初のif判定だけで、十分なような気が・・・。 もしくは、 if(isset($check_data["commento"]) && trim($check_data["comment"]) === ""){ ... } とすればいいのでは?と。。。 でも書籍の中のコードは、何か意味があってのものだと思います。 どなたか宜しくご教授くださいませ。 お願いします。

    • ベストアンサー
    • PHP
  • 入力文字のバイト数

    いつも参考にしております。 入力文字のバイト数のカウントについて質問をさせていただきます。 入力フォームなどで、入力文字数の制限をしたいと考えております。 文字を入力するたびに、バイト数がテキストボックスに常に 表示されるようにしたいと考えております。 以下を参考にできるのではないとか思っておりますが。 <script language="javascript"> <!-- function check() {  txt = document.myFORM.myTEXT.value;  n = txt.length;  if (n > 10) alert("10文字以内にしてください"); } --> </script> <form name="myFORM"> <textarea rows="3" name="myTEXT" onChange="check()"></textarea> </form> ご教授お願いいたします。

  • mb_strlenが ローカルでは正常なのに、サーバー上ではおかしい

    宜しくお願いします。 多分初歩的な質問になっていますが、 検索しても解決できなかったので・・・。 ウインドウズのローカルにて、utf8,PHP5.0 MySQLを使って、 ちょっとしたフォーム入力がメインのページを作りました。 完成し、レンタルサーバーへアップしたのですが、 ローカルではちゃんと動いてた、mb_strlen関数が、 サーバーへアップロード後、文字数を大幅に少なく見積もって値を返しているようです。 また、mb_strlenとは関係ないですが、 特定のページだけ、文字化けした値がデーターベースから返ってきているようです。 まず、mb_strlen の件で、ローカルとサーバーをどうやってあわせればいいのでしょうか? php.ini のどこかを見ればいいと思いますが・・・。

    • ベストアンサー
    • PHP
  • マルチバイト混在の文字列整形

    OS: Linux Ubuntu 言語: C++ 引数でchar*型の文字列配列(マルチバイト含む)を受け取り 指定した幅で枠つきで文字列を出力したいのですがうまくいきません。 作りたい出力 ━━━━━━━ ┃1: あいうえお┃ ┃2: かきく   ┃ ┃3: abc    ┃ ━━━━━━━ - str[] = {"あいうえお", "かきく", "abc"} - あいうえおの後ろは空白なし - 他は空白と文字列を合計してあいうえおと同じ長さに合うように 私の環境では日本語は3byteと認識され  strlen("あいうえお") = 15 となります。 イメージでは for (i = 0; i < strlen(str[])の最大値; i++) { cout << "┃" << i << ":" << setw(15) << left << str[i] << "┃" } のようなコードになると思うのですが 日本語一文字が出力上は2byte分の幅に見えるのに 認識としては3byteになってしまうので空白が1byte多くなり ━━━━━━━ ┃1: あいうえお┃ ┃2: かきく    ┃ ┃3: abc       ┃ ━━━━━━━ のようにずれてしまいます。 (表記上、最初の枠もずれていますが  現状は足りない分を埋めるsetfillが余計に働いてしまうということです。) 何か対策はありますでしょうか?

  • 「ORA-29275: 不完全なマルチバイト文字」

    はじめまして。 「ORA-29275: 不完全なマルチバイト文字」についてですが、10gまでのoracleデータベースではデータ登録時にエラーチェックが行われていましたが、11gからパフォーマンス重視の仕様の影響でチェックが行われなくなりました。 これによって、大量のデータの中にORA-29275に該当するデータが混入してしまって困ってます。 オブジェクトブラウザなどの機能を使用してデータの出力を試みても、出力中にORA-29275となり、出力すらできません。 データを適正な形にアップデートしてあげる必要があるのですが、対象のデータを特定する方法はありませんか?(対象の特定ができなければデータを修正できません。)

  • Call to undefined function: mb_strlen() がでる

    こんにちわ, 現在PHPの学習をしています。 あるところでマルチバイト関数mb_strlenを使用しているのですが,表題とおり, 「Call to undefined function: mb_strlen() 」 というエラーが出ます。 使用しているPHPはver4.3.4でコンパイルは, ./buildconf --force ./configure --enable-jstring --with-namazu --with-kakasi --enable-mbregex --enable-iconv --with-pgsql --with-apxs=/usr/local/apache/bin/apxs --enable-trans-sid --enable-track-vars --enable-mbstr-enc-trans make としたのですが,なにかたりないのでしょうか? 一応--enable-mbregexをつけたのですが, 知っている方,よろしくお願いします。

    • ベストアンサー
    • PHP