Home >PHP >PHP manuál - funkce >mb_detect_encoding

mb_detect_encoding

mb_detect_encoding($retezec, $kodovani, $prisne)

Zkusí určit, ve kterém ze zadaných kódování text je, a vrátí jeho název. Když nevyhovuje žádné, vrátí false. Je to jen odhad: spolehlivě jde poznat platné UTF-8, jednobajtová kódování mezi sebou rozeznat nejde.

Parametry

  • $retezec – zkoumaný text.
  • $kodovani – nepovinný, seznam kandidátů jako pole nebo text oddělený čárkami. Výchozí je hodnota mb_detect_order(), obvykle ASCII a UTF-8.
  • $prisne – nepovinný, výchozí false. S true musí být text v daném kódování celý platný.

Příklady

echo mb_detect_encoding("čaj", "UTF-8", true); // UTF-8
// bajt E8 je „č“ ve Windows-1250 i ISO-8859-2, v UTF-8 sám platný není
var_dump(mb_detect_encoding("\xE8aj", "UTF-8", true)); // bool(false)
echo mb_detect_encoding("\xE8aj", array("UTF-8", "ISO-8859-2"), true); // ISO-8859-2
// tentýž text vyhovuje i ISO-8859-1 – vrátí se první vyhovující ze seznamu
echo mb_detect_encoding("\xE8aj", array("UTF-8", "ISO-8859-1", "ISO-8859-2"), true); // ISO-8859-1
// text bez diakritiky vyhovuje všem kódováním
echo mb_detect_encoding("abc", array("ASCII", "UTF-8"), true); // ASCII
echo mb_detect_encoding("abc", array("UTF-8", "ISO-8859-2"), true); // UTF-8
// spolehlivější postup: je to platné UTF-8? Když ne, převést ze známého kódování
$vstup = "\xE8aj";
$text = mb_check_encoding($vstup, "UTF-8") ? $vstup : iconv("Windows-1250", "UTF-8", $vstup);
echo $text; // čaj

Na co si dát pozor

  • Jednobajtová kódování (ISO-8859-1, ISO-8859-2, Windows-1250, Windows-1252) od sebe rozeznat nejde. Skoro každá posloupnost bajtů je platná ve všech a funkce textu nerozumí. Výsledek proto závisí jen na pořadí v seznamu.
  • Spolehlivá je jediná otázka: „je to platné UTF-8?“ Na tu odpoví přímo mb_check_encoding().
  • Vždy zapněte přísný režim (třetí parametr true). Bez něj může funkce v PHP 7 vrátit i kódování, ve kterém text platný není.
  • UTF-8 dávejte v seznamu před jednobajtová kódování. Text v UTF-8 je platný i jako ISO-8859-2, jen s nesmyslnými znaky.
  • Od PHP 8.1 funkce nevrací první vyhovující kódování, ale to, které vyhodnotí jako nejpravděpodobnější. Stejný kód proto může v různých verzích PHP vrátit různý výsledek.
  • Kódování má být známé předem: z hlavičky, z dohody s dodavatelem dat nebo z nastavení exportu. Hádání je až poslední možnost.

Příbuzné funkce:
mb_check_encoding()
mb_convert_encoding()
iconv()