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ą