grapheme_strlen
funkcja
Zlicza klastry grafemowe (znaki widziane przez użytkownika) w ciągu UTF-8. Poprawnie obsługuje emoji i litery łączone ze znakami diakrytycznymi.
grapheme_strlen(string $string): int|false|null
grapheme_strlen liczy klastry grafemowe — znaki tak, jak widzi je użytkownik — a nie bajty ani jednostki kodu Unicode (code points). To kluczowa różnica względem mb_strlen: ta ostatnia zlicza code pointy, ale nie scala ich w klastry. Litera é zapisana jako e + łączący znak akcentu U+0301 to dwa code pointy, lecz jeden klaster grafemowy — jeden widoczny znak.
Funkcja wymaga rozszerzenia intl.
<?php
declare(strict_types=1);
$s = 'Łódź';
echo grapheme_strlen($s); // 4 (klastry grafemowe)
echo mb_strlen($s); // 4 (code pointy — tu identyczny wynik)
echo strlen($s); // 7 (bajty w UTF-8)
// Różnica ujawnia się przy znakach łączonych (combining marks):
$e_z_akcentem = "e\u{0301}"; // 'e' + U+0301 combining acute accent
echo grapheme_strlen($e_z_akcentem); // 1 — jeden widoczny znak
echo mb_strlen($e_z_akcentem); // 2 — dwa code pointy