Ce face mb_substr
mb_substr funcționează ca substr, dar pozițiile și lungimea sunt în caractere, nu în octeți. Astfel nu taie niciodată o literă cu diacritice la jumătate.
Pozițiile încep de la 0, iar valorile negative se numără de la final, la fel ca la substr.
Parametri
| Parametru | Descriere |
|---|---|
$string |
Textul original. |
$start |
Poziția de început, în caractere. Negativă: de la final. |
$length |
Opțional. Câte caractere să extragă. Fără el, până la final. |
$encoding |
Opțional. Codarea textului. |
Ce returnează
Bucata de text extrasă.
Exemple
Exemplul 1: substr numără octeți, mb_substr numără caractere
„Ț” și „ă” au câte 2 octeți, deci primii 4 octeți înseamnă doar 2 litere. Cu 3 octeți, substr taie litera „ă” la jumătate și rezultatul nu mai este un text UTF-8 valid.
<?php
$oras = "Țăndărei";
var_dump(substr($oras, 0, 4));
var_dump(mb_substr($oras, 0, 4));
var_dump(mb_check_encoding(substr($oras, 0, 3), "UTF-8"));
Rezultat
string(4) "Ță"
string(6) "Țănd"
bool(false)
Exemplul 2: Rezumat scurt cu puncte de suspensie
<?php
function scurteaza(string $text, int $maxim): string
{
if (mb_strlen($text) <= $maxim) {
return $text;
}
return rtrim(mb_substr($text, 0, $maxim - 1)) . "…";
}
echo scurteaza("Învățăm șiruri de caractere în PHP", 20) . "\n";
echo scurteaza("Text scurt", 20);
Rezultat
Învățăm șiruri de c…
Text scurt
Greșeli frecvente
- Combini
mb_substrcu poziții calculate destrpos.strposdă poziții în octeți; foloseștemb_strposca să lucrezi peste tot în caractere.
Comenzi înrudite
substr: Extrage o bucată dintr-un text, pornind de la o anumită poziție.mb_strlen: Returnează lungimea unui text în caractere, numărând corect literele cu diacritice.mb_strpos / mb_stripos: Găsește poziția unui text în alt text, numărată în caractere, nu în octeți.