mb_strcut
funkcja
Wycina fragment ciągu według liczby bajtów, ale nigdy nie przetnie znaku wielobajtowego na pół.
mb_strcut(string $string, int $start, ?int $length = null, ?string $encoding = null): string
mb_strcut działa podobnie do substr() — wycina fragment ciągu zaczynając od pozycji $start liczonej w bajtach i pobierając co najwyżej $length bajtów. Kluczowa różnica: jeśli granica bajtu wypadłaby w środku znaku wielobajtowego, mb_strcut skróci wynik, żeby nie zwrócić uszkodzonego ciągu. Zwykłe substr() bezmyślnie przetnie znak na pół.
<?php
declare(strict_types=1);
// 'Łódź' w UTF-8 ma 7 bajtów: Ł=2, ó=2, d=1, ź=2
$s = 'Łódź';
echo mb_strcut($s, 0, 3, 'UTF-8'); // wynik: Ł (3 bajty nie starczą na 'ó', więc tylko 'Ł'=2B)
echo mb_strcut($s, 0, 4, 'UTF-8'); // wynik: Łó (4 bajty = Ł(2)+ó(2))
// substr() zepsuje string:
echo substr($s, 0, 3); // wynik: Ł + pierwszy bajt 'ó' — nieprawidłowy UTF-8!
mb_strcut przydaje się, gdy musisz ograniczyć rozmiar danych w bajtach (np. pole bazy danych, nagłówek HTTP) i jednocześnie zachować poprawny UTF-8. Jeśli zależy Ci na liczbie znaków, użyj mb_substr().