PHP 7.4.24 Released!

grapheme_extract

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

grapheme_extractUTF-8 kodlanmış bir metin tamponundan öntanımlı sesletim kümelerinden oluşan bir dizilimi döndürür

Açıklama

Yordamsal kullanım

grapheme_extract(
    string $samanlık,
    int $boyut,
    int $tür = GRAPHEME_EXTR_COUNT,
    int $başlangıç = 0,
    int &$sonraki = null
): string

UTF-8 kodlanmış bir metin tamponundan öntanımlı sesletim kümelerinden oluşan bir dizilimi döndürür.

Değiştirgeler

samanlık

Aramanın yapılacağı dizge.

boyut

Döndürülecek azami tür sayısı.

tür

boyut değiştirgesini oluşturacak tür:

  • GRAPHEME_EXTR_COUNT (öntanımlı) - boyut, döndürülecek öntanımlı sesletim kümesi sayısıdır.
  • GRAPHEME_EXTR_MAXBYTES - boyut, döndürülecek azami bayt sayısıdır.
  • GRAPHEME_EXTR_MAXCHARS - boyut, döndürülecek UTF-8 karakterlerin azami sayısıdır.
başlangıç

Bayt cinsinden aramanın başlatılacağı konum. Belirtildiği takdirde, sıfır veya samanlık uzunluğuna eşit veya daha küçük bir tamsayı olmalıdır. Negatif değerler samanlık'ın sonundan itibarten sayılır. başlangıç bir UTF-8 karakterin ilk baytı değilse, sonraki karakterin ilk baytına taşınır.

sonraki

Sonraki aramanın başlangıç konumu. Çağrı sonunda dönen dizgenin son karakterinden sonraki ilk baytın konumu olacaktır.

Dönen Değerler

Belirtilen başlangıç konumunda başlayıp, boyut ve tür değiştirgelerine göre uzunluğu belirlenen bir öntanımlı sesletim kümesini içeren bir dizge ile döner, başarısızlık durumunda false döner.

Sürüm Bilgisi

Sürüm: Açıklama
7.1.0 başlangıç artık negatif olabiliyor.

Örnekler

Örnek 1 - grapheme_extract() örneği

<?php
$char_a_ring_nfd 
"a\xCC\x8A";      // 'å' (U+00E5) normalleştirme biçimi "D"
$char_o_diaeresis_nfd "o\xCC\x88"// 'ö' (U+00F6) normalleştirme biçimi "D"

print urlencode(grapheme_extract$char_a_ring_nfd $char_o_diaeresis_nfd1,
                                  
GRAPHEME_EXTR_COUNT2));

?>

Yukarıdaki örneğin çıktısı:

o%CC%88
add a note add a note

User Contributed Notes 2 notes

up
4
AJH
10 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!
?>
up
0
yevgen dot grytsay at gmail dot com
11 months ago
Looping through grapheme clusters:

<?php

// Example taken from Rust documentation: https://doc.rust-lang.org/book/ch08-02-strings.html#bytes-and-scalar-values-and-grapheme-clusters-oh-my
$str = "नमस्ते";
// Alternatively:
//$str = pack('C*', ...[224, 164, 168, 224, 164, 174, 224, 164, 184, 224, 165, 141, 224, 164, 164, 224, 165, 135]);
$next = 0;
$maxbytes = strlen($str);

var_dump($str);

while (
$next < $maxbytes) {
   
$char = grapheme_extract($str, 1, GRAPHEME_EXTR_COUNT, $next, $next);
    if (empty(
$char)) {
        continue;
    }
    echo
"{$char} - This utf8 character is " . strlen($char) . ' bytes long', PHP_EOL;
}

//string(18) "नमस्ते"
//न - This utf8 character is 3 bytes long
//म - This utf8 character is 3 bytes long
//स् - This utf8 character is 6 bytes long
//ते - This utf8 character is 6 bytes long
?>
To Top