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