mb_substr în PHP

Extrage o bucată dintr-un text după poziții în caractere, fără să strice diacriticele.

Sintaxă
mb_substr(string $string, int $start, ?int $length = null, ?string $encoding = null): string

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_substr cu poziții calculate de strpos. strpos dă poziții în octeți; folosește mb_strpos ca 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.