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().

📘 Naucz się w lekcji →