Proč máme s UTF-8 problém - autor error414 · Mar 16, 12:13 PM by Kašpy
Článek napsal Error414 – by Kaspy sem tam doplňuje – za článek mu tímto děkuji.
UTF-8 je v PHP5 a nižších špatně podporované a při práci sním si musím dát pozor na několik funkcí, které pracují s textem (reg, eregi, plit, strcut, strlen, substr ). Pro práci s UTF-8 (multi-bytové kódovaní) mají tyto funkce ekvivalenty
: mb_ereg, mb_eregi, mb_split, mb_strcut, mb_strlen, mb_substr. Vždy s prefixem mb_ (multi-byte).
Proč ale mají obyčejné funkce s UTF-8 problém? Je to proto že pro interpretaci některých znaků používá UTF-8 více bytů. Pro spodní polovinu ASCII použije jeden byte, pro interpretaci znaků s háčky a čárky použije dva byty.
Můžeme si to vyzkoušet. Použijeme funkci strlen (vrací počet znaků ).
UTF-8
<?php
$delka = strlen('kůň běhá po loukách');
echo $delka;
// vypise 24
?>
ISO 8859-2
<?php
$delka = strlen('kůň běhá po loukách');
echo $delka;
// vypise 19
?>
UTF-8 s funkcí mb_strlen
<?php
$delka = mb_strlen('kůň běhá po loukách', 'utf-8');
echo $delka;
// vypise 19
?>
Všimněte si že funkce mb_strlen má navíc jeden argument, který určuje jaké kódování jsme použili.
Problém začátečníkům také dělá identifikační byty na začátku textového souboru UTF-8, který vytvořím ve špatně nastaveném editoru. Identifikační byty mají hodnotu EF BB (<). Normálně textový editor tyto byty nezobrazí. Musíme soubor otevřít v hexa editoru .
Výborný nástroj pro práci s UTF-8 je PsPad, který nám dovoluje identifikační byty vypnout. Zobrazit
Práce s UTF-8 není snadná, ale není nemožná stačí si zapamatovat pár problémů, které UTF-8 způsobuje.
V připravované verzi PHP6 má být jako nativní kódování použito UTF-16.

commenting closed for this article

Mas chybu tam s tym mb_strlen, vysledok je 19
— ikso Mar 16, 04:57 PM #
Já sem scripty nekontroloval takže nevim jestli tam je nebo ne, pak to testnu, díky za echo
— Kašpy Mar 16, 05:11 PM #
dik za upozorneni
— error414 Mar 16, 06:41 PM #
tohle moc dobre znam, a uz jsem si nekolikrat kvuli tomu prepsal nektere scripty – script jsem ulozil do utf-8 a on nesel :) sem myslel, ze to je moje chyba :)
— maikeroo Mar 17, 10:46 AM #
:-)
— Kašpy Mar 17, 12:44 PM #
jj, kodovani to je mrcha :) zvlaste u wordpressu, tam je standartne utf-8 :)
— maikeroo Mar 17, 03:29 PM #
no me o kodovani ani nerikej:-)
— peCan Mar 22, 11:16 AM #