grapheme_str_split în PHP

Șiruri de caractere PHP 8.4+ (extensia intl)

Împarte un text în caractere așa cum le vede omul (grafeme), inclusiv emoji compuse și litere cu semne separate.

Sintaxă
grapheme_str_split(string $string, int $length = 1): array|false

Ce face grapheme_str_split

Unele „caractere” vizibile sunt formate din mai multe caractere Unicode: steagul României este format din două simboluri regionale, un emoji de familie din mai multe persoane unite, iar „ă” poate fi scris ca „a” urmat de semnul ˘. mb_str_split le desparte, grapheme_str_split le păstrează întregi.

Funcția face parte din extensia intl. Textul trebuie să fie UTF-8 valid.

Parametri

Parametru Descriere
$string Textul UTF-8 de împărțit.
$length Câte grafeme să pună în fiecare bucată (implicit 1).

Ce returnează

Un tablou cu bucățile de text, sau false dacă textul nu este UTF-8 valid.

Exemple

Exemplul 1: Steag și emoji compus

<?php
$text = "🇷🇴👩‍💻";

echo count(mb_str_split($text)) . " caractere Unicode\n";
echo count(grapheme_str_split($text)) . " grafeme\n";
print_r(grapheme_str_split($text));

Rezultat

5 caractere Unicode
2 grafeme
Array
(
    [0] => 🇷🇴
    [1] => 👩‍💻
)

Exemplul 2: Litere scrise cu semn separat

Aici „ă” este scris ca „a” urmat de semnul combinat U+0306, cum apare uneori în texte copiate din PDF-uri.

<?php
$cuvant = "ma\u{0306}r";

print_r(mb_str_split($cuvant));
print_r(grapheme_str_split($cuvant));

Rezultat

Array
(
    [0] => m
    [1] => a
    [2] => ̆
    [3] => r
)
Array
(
    [0] => m
    [1] => ă
    [2] => r
)

Greșeli frecvente

  • Folosești str_split pe text românesc: împarte pe octeți și strică literele cu diacritice.
  • Funcția lipsește pe server: extensia intl nu este instalată (php -m | grep intl).

Comenzi înrudite

  • mb_str_split: Împarte un text în caractere (sau grupuri de caractere), fără să strice literele cu diacritice.
  • str_split: Împarte un text în bucăți de aceeași lungime și le pune într-un tablou.
  • grapheme_levenshtein: Distanța Levenshtein dintre două texte, numărată pe caractere vizibile (grafeme), corectă pentru diacritice și emoji.
  • mb_strlen: Returnează lungimea unui text în caractere, numărând corect literele cu diacritice.