Deprecated: Function set_magic_quotes_runtime() is deprecated in /data/www/www_kaspy_cz/textpattern/lib/txplib_db.php on line 14 KAŠPY - PHP BLOG

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.

  1. Mas chybu tam s tym mb_strlen, vysledok je 19


    ikso    Mar 16, 04:57 PM    #
  2. 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    #
  3. dik za upozorneni


    error414    Mar 16, 06:41 PM    #
  4. 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    #
  5. :-)


    Kašpy    Mar 17, 12:44 PM    #
  6. jj, kodovani to je mrcha :) zvlaste u wordpressu, tam je standartne utf-8 :)


    maikeroo    Mar 17, 03:29 PM    #
  7. no me o kodovani ani nerikej:-)


    peCan    Mar 22, 11:16 AM    #

commenting closed for this article