strlen($string) mengembalikan panjang string dalam byte. Untuk jumlah karakter, yang memang kamu butuhkan untuk teks Jepang, huruf beraksen, dan emoji, pakai mb_strlen($string). Untuk teks bahasa Inggris biasa, keduanya memberi angka yang sama.
Spasi, tanda baca, dan baris baru semuanya ikut dihitung. strlen("a b\n") bernilai 4.
Byte vs karakter di UTF-8
String PHP adalah deretan byte, dan UTF-8 memakai jumlah byte yang berbeda untuk setiap karakter: 1 untuk huruf dan angka ASCII, 2 untuk huruf seperti é atau ж, 3 untuk kana, kanji umum, karakter Tionghoa, dan simbol seperti €, serta 4 untuk kebanyakan emoji dan kanji langka seperti 𠮷. strlen() menjumlahkan byte-nya; mb_strlen() menghitung karakternya. Konverter teks ke biner menampilkan byte di balik string apa pun.
Pakai strlen() saat yang penting adalah byte: kolom database yang dibatasi dalam byte, ukuran file, protokol biner. Pakai mb_strlen() untuk apa pun yang dibaca orang: penghitung karakter, aturan "maksimal 20 karakter", atau memotong teks dengan mb_substr().
Emoji dan karakter yang tersusun dari beberapa code point
mb_strlen() menghitung code point Unicode. Beberapa hal yang dilihat pembaca sebagai satu karakter sebenarnya adalah beberapa code point yang digabung: emoji keluarga, bendera, warna kulit, atau huruf ditambah aksen gabungan.
Menghitung apa yang dilihat pembaca sebagai satu karakter (grapheme cluster) membutuhkan grapheme_strlen() dari ekstensi intl:
echo grapheme_strlen('👨👩👧'); // 1
echo grapheme_strlen('🇯🇵'); // 1
Untuk penghitung karakter di formulir berbahasa Jepang, mb_strlen() biasanya sudah cukup: setiap kana dan kanji adalah satu code point.
Lebar tampilan dengan mb_strwidth
Di terminal atau di tata letak dengan lebar tetap, satu karakter Jepang lebar penuh memakan dua kolom, sedangkan katakana setengah lebar atau huruf Latin memakan satu kolom. mb_strwidth() mengembalikan lebar itu, dan inilah yang biasanya dimaksud aturan Jepang "全角は2文字".
Memeriksa apakah string kosong
Cara yang paling jelas adalah perbandingan ketat dengan ''. strlen($s) === 0 memberi jawaban yang sama. empty($s) tidak sama: fungsi itu juga mengembalikan true untuk string "0", yang merupakan jawaban yang sah di banyak formulir.
String yang berisi spasi tidak kosong. Proses dulu dengan trim() kalau spasi saja harus dianggap tidak berisi apa-apa.
strlen(null) dan nilai yang bukan string
strlen() mengharapkan string. Memberikan null tetap mengembalikan 0, tetapi sejak PHP 8.1 fungsi ini mencetak pemberitahuan deprecation:
Deprecated: strlen(): Passing null to parameter #1 ($string) of type string is deprecated in /home/index.php on line 2
Array melempar TypeError: strlen(): Argument #1 ($string) must be of type string, array given.
Lakukan cast atau beri nilai default terlebih dahulu, misalnya strlen($value ?? ''). Integer diubah menjadi string, jadi strlen(12345) bernilai 5. Untuk menghitung elemen array, pakai count().
Memvalidasi panjang input pengguna
Aturan yang umum: username berisi 3 sampai 16 karakter, setelah di-trim. Pakai mb_strlen() supaya nama Jepang diukur dalam karakter, bukan byte.
Dengan strlen() sebagai ganti mb_strlen(), やまだたろう akan dihitung 18 dan ditolak karena terlalu panjang, padahal hanya enam karakter.
Pertanyaan yang sering diajukan
Bagaimana cara mengetahui panjang string di PHP?
strlen($s) mengembalikan jumlah byte dan mb_strlen($s) jumlah karakter. Untuk teks bahasa Inggris biasa, hasilnya sama; untuk teks Jepang, huruf beraksen, atau emoji, pakai mb_strlen().
Kenapa strlen() memberi panjang yang salah untuk teks Jepang?
Hasilnya tidak salah, fungsi ini menghitung byte. UTF-8 menyimpan kana dan kanji umum masing-masing dalam 3 byte, jadi strlen('日本語') bernilai 9, sedangkan mb_strlen('日本語') bernilai 3.
Bagaimana cara menghitung karakter string yang berisi emoji?
mb_strlen() menghitung code point Unicode, jadi emoji sederhana dihitung 1, tetapi emoji yang tersusun dari beberapa code point (keluarga, bendera, warna kulit) dihitung lebih dari itu. grapheme_strlen() dari ekstensi intl menghitung apa yang dilihat pembaca sebagai satu karakter.
Apa bedanya strlen dan count di PHP?
strlen() mengukur string, count() menghitung elemen array. Memberikan array ke strlen() melempar TypeError di PHP 8.
Bagaimana cara memeriksa apakah string kosong di PHP?
Bandingkan dengan string kosong: $s === '', atau strlen($s) === 0. Hindari empty($s) untuk ini, karena fungsi itu juga menganggap string "0" sebagai kosong.