6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHPの文字数検知 Tips

Posted at

文字数を計算して、指定以上の文字数ならエラー出すの処理で引っかかったのでメモ

####1.phpでの文字数検知####
使ってみた検知用の関数は、以下2つ

 icov_strlen(str)

与えられたバイト列 str 中に現れる文字の数を 指定された文字セットに基づいて数えます。この結果は、必ずしも文字列の バイト数と一致するとは限りません。
本家リンクより

mb_strlen(string $str [, string $encoding = mb_internal_encoding() ])

文字列の長さを取得します。
本家リンクより

####2.動作検証####
以下のコードで実行してみました。ターミナルで実行すると文字コード見られないので、
htmlのbodyの中入れて、ブラウザで検証します。

hoge.php

$characters = array(
          "test&",
          "テスト",
          "♡"
);
for($i = 0; $i < count($characters); $i++){
  echo $characters[$i]."<br>";
  echo "iconv_strlenでの文字数 :".iconv_strlen($characters[$i])."<br>"; 
  echo "mb_strlen(utf-8なし)文字数 :".mb_strlen($characters[$i])."<br>";
  echo "mb_strlenでの文字数 :".mb_strlen($characters[$i],"utf-8")."<br><br>";
     }

####3.結果####

test&
iconv_strlenでの文字数 :5
mb_strlen(utf-8なし)文字数 :5
mb_strlenでの文字数 :5

テスト
iconv_strlenでの文字数 :9
mb_strlen(utf-8なし)文字数 :9
mb_strlenでの文字数 :3

♡
iconv_strlenでの文字数 :3
mb_strlen(utf-8なし)文字数 :3
mb_strlenでの文字数 :1

mb_strlenはutf-8を追加しないと、欲しい結果をくれないことがわかりました。

####4.まとめ####
全角や半角を区別したい場合

icov_strlen(文字);

全角か半角のどちらでも1文字なのか判断したい場合

mb_strlen(文字,"utf-8");
6
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?