grapheme_strpos

funkcja

Wyszukuje podciąg w tekście UTF-8 i zwraca pozycję w klastrach grafemowych. Bezpieczna alternatywa strpos() dla emoji i znaków łączonych.

grapheme_strpos(string $haystack, string $needle, int $offset = 0): int|false

grapheme_strpos działa jak strpos, lecz pozycję mierzy w klastrach grafemowych (znakach widzianych przez użytkownika), nie w bajtach. Gdy tekst zawiera emoji lub znaki złożone z łączących akcentów, pozycja bajtowa i pozycja grafemowa się rozchodzą — grapheme_strpos zawsze zwróci tę drugą, co jest właściwą wartością do dalszego użycia z grapheme_substr.

Funkcja zwraca false, gdy szukanego podciągu nie znaleziono. Wymaga rozszerzenia intl.

<?php
declare(strict_types=1);

$s = 'Zażółć gęślą';

$pos = grapheme_strpos($s, 'ę');
echo $pos; // 8 (8. klaster grafemowy, licząc od 0)

// Szukanie od określonej pozycji
$pos2 = grapheme_strpos($s, 'ó', 3);
echo $pos2; // 3

// Brak dopasowania
var_dump(grapheme_strpos($s, 'x')); // bool(false)

// Wycięcie od znalezionej pozycji — działa poprawnie z grapheme_substr
echo grapheme_substr($s, $pos); // ęślą