- ベストアンサー
文字数を、正しくカウントできない(PHP使用)
現在私が使用しているホスティングサービスの環境では 以下の現象ですが、カッコ内の値を求めたいのですが、 どう対処すれば実現できるでしょか。 (1) 日本語4文字をカウントした時、 mb_strlen()関数で、12が戻る。(4文字) strlen()関数で、12が戻る。(8バイト) (2) 英数字4文字をカウントした時、 mb_strlen()関数で、4が戻る。(4文字) strlen()関数で、4が戻る。(4バイト)
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
補足で。 mb_internal_encoding("UTF-8"); $str="文字数計算"; echo mb_strlen($str); echo strlen(mb_convert_encoding($str, 'SJIS', 'UTF-8')); 出力結果、 mb_strlen=5 strlen=10
その他の回答 (1)
- buraru
- ベストアンサー率54% (12/22)
回答No.1
strlenはバイト数をカウントしているので、文字コードがUTF-8の場合は日本語1文字当たり3で返っていしまいます。 なので計算時のみ、SJISに変換しましょう。 strlen(mb_convert_encoding('文字数計算', 'SJIS', 'UTF-8')); 上記ソースの実行結果は10です。 >(1) 日本語4文字をカウントした時、 >mb_strlen()関数で、12が戻る。(4文字) これは「あれ?」なので、mb_internal_encodingを設定しましょう。 http://php.net/manual/ja/function.mb-strlen.php