mb_strlen

mb_strlen($retezec, $kodovani)

Vrátí počet znaků v řetězci. Funkce strlen() počítá bajty, takže u textu v UTF-8 s diakritikou vrací víc. Kdykoli jde o délku textu, jak ji vidí člověk, patří sem mb_strlen.

Parametry

  • $retezec – měřený text.
  • $kodovani – nepovinný, kódování textu. Výchozí je hodnota mb_internal_encoding(), obvykle UTF-8.

Příklady

echo mb_strlen("žába"); // 4
echo strlen("žába"); // 6
echo mb_strlen("Příliš žluťoučký kůň"); // 20
echo mb_strlen(""); // 0
// kontrola délky jména z formuláře (nejvýš 5 znaků)
$jmeno = "Žofie";
var_dump(mb_strlen($jmeno) <= 5); // bool(true)
var_dump(strlen($jmeno) <= 5); // bool(false)
// kódování zapsané výslovně
echo mb_strlen("žába", "UTF-8"); // 4
// kódování 8bit počítá bajty jako strlen
echo mb_strlen("žába", "8bit"); // 6
// písmeno složené ze dvou znaků (c a samostatný háček) se počítá dvakrát
echo mb_strlen("c\xCC\x8C"); // 2
// viditelné znaky spočítá grapheme_strlen z rozšíření intl
echo grapheme_strlen("c\xCC\x8C"); // 1

Na co si dát pozor

  • Na délku textu od uživatele (jméno, nadpis, zpráva) používejte mb_strlen. Sloupec VARCHAR(50) v MySQL má limit také ve znacích.
  • Kde jde o bajty, patří strlen(): velikost dat, hlavička Content-Length, limit velikosti souboru.
  • Počítá kódové body, ne to, co člověk vidí jako jeden znak. Písmeno složené ze základního znaku a samostatné diakritiky nebo znak poskládaný z více částí dá víc než 1. Přesně počítá grapheme_strlen().
  • Neplatné UTF-8 nehlásí, jen vrátí nějaké číslo. Vstup zvenčí nejdřív ověřte přes mb_check_encoding().
  • Neznámý název kódování znamená v PHP 7 varování a false, od PHP 8.0 výjimku ValueError.

Příbuzné funkce:
strlen()
mb_substr()
mb_check_encoding()