PHP 5.5.16 is released

grapheme_extract

(PHP 5 >= 5.3.0, PECL intl >= 1.0.0)

grapheme_extractExtrait un groupe de graphème d'une chaîne UTF-8

Description

Style procédural

string grapheme_extract ( string $haystack , int $size [, int $extract_type [, int $start = 0 [, int &$next ]]] )

Cette fonction extrait une séquence de groupes de graphèmes par défaut d'un texte en UTF-8.

Liste de paramètres

haystack

La chaîne à étudier.

size

Le nombre maximal d'élément, en fonction de $extract_type, à retourner.

extract_type

Définit le type d'unités indiquées par le paramètre $size :

  • GRAPHEME_EXTR_COUNT (par défaut) : $size est le nombre de groupe de graphèmes à extraire.
  • GRAPHEME_EXTR_MAXBYTES : $size est le nombre d'octets à retourner.
  • GRAPHEME_EXTR_MAXCHARS : $size est le nombre de caractères UTF-8 à retourner.

start

La position de début dans $haystack, exprimée en octets. Elle doit être positive, nulle ou inférieure à la taille de $haystack en octets. Si $start ne correspond pas au premier octets d'un caractère UTF-8 valide, la position de démarrage sera déplacée au prochain octet valide.

next

Référence à une variable qui recevra la prochaine position de début valide. Lorsque la fonction se termine, cela peut être une position qui est au dela de la taille de la chaîne.

Valeurs de retour

Une chaîne qui débute à la position $start et se termine à la limite valide d'un graphème, et qui se conformen aux conditions $size et $extract_type.

Exemples

Exemple #1 Exemple avec grapheme_extract()

<?php

$char_a_ring_nfd 
"a\xCC\x8A";  // 'LATIN SMALL LETTER A WITH RING ABOVE' (U+00E5) normalization form "D"
$char_o_diaeresis_nfd "o\xCC\x88"// 'LATIN SMALL LETTER O WITH DIAERESIS' (U+00F6) normalization form "D"

print urlencode(grapheme_extract$char_a_ring_nfd $char_o_diaeresis_nfd1GRAPHEME_EXTR_COUNT2));

?>

L'exemple ci-dessus va afficher :

o%CC%88
add a note add a note

User Contributed Notes 1 note

up
0
AJH
3 years ago
Here's how to use grapheme_extract() to loop across a UTF-8 string character by character.

<?php

$str
= "سabcक’…";
// if the previous line didn't come through, the string contained:
//U+0633,U+0061,U+0062,U+0063,U+0915,U+2019,U+2026

$n = 0;

for (   
$start = 0, $next = 0, $maxbytes = strlen($str), $c = '';
       
$start < $maxbytes;
       
$c = grapheme_extract($str, 1, GRAPHEME_EXTR_MAXCHARS , ($start = $next), $next)
    )
{
    if (empty(
$c))
        continue;
    echo
"This utf8 character is " . strlen($c) . " bytes long and its first byte is " . ord($c[0]) . "\n";
   
$n++;
}
echo
"$n UTF-8 characters in a string of $maxbytes bytes!\n";
// Should print: 7 UTF8 characters in a string of 14 bytes!
?>
To Top