T&R splet blog o spletnih storitvah. Razgaljamo tehnologijo!

reference spletnih strani
21st March

Šumniki – UTF-8 – Težave – PHP & MySQL

Vse več spletnih strani prehaja iz latin1 (oz. ISO-8859-1) na UTF-8 kodni sistem oz. character set. Posledično je sedaj vprašanj s tem toliko več. Poglejmo si celoten proces, ki bo spletno stran iz ISO-8859-1(latin1) spremenil v UTF-8 kodni sistem:

#1 IDE
Nastavljen UTF-8 encoding v Zend Studio programu. Vse trenutne datoteke (sploh datoteke, ki vsebujejo prevode je treba shraniti v UTF-8 in popraviti težave s šumniki.

#2 BOM
Problemi in rešitve za BOM znak na začetku datoteke.

#3 PHP Header na začetku (prve) skripte

PHP:
  1. PHP header('Content-Type: text/html; charset=utf-8');

#4 HTML meta content-type

PHP:
  1. <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />

#5 PHP encoding MySQL povezave

MySQL:
  1. "SET NAMES 'utf8' COLLATE 'utf8_slovenian_ci'"

#6 Podatki v bazi morajo biti v UTF-8
Več informacij in konvertiranje podatkov iz latin1 v UTF-8. Struktura tabel ter baze mora ravno tako biti UTF-8, primer:

MySQL:
  1. CREATE TABLE `utf8tabela` (
  2. `utf8poljevarchar` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_slovenian_ci,
  3. `utf8poljetext` TEXT CHARACTER SET utf8 COLLATE utf8_slovenian_ci
  4. ) CHARACTER SET utf8 COLLATE utf8_slovenian_ci;

Uporabno:
#1 PHP Sortiranje UTF-8 podatkov v tabeli (array):

PHP:
  1. setlocale (LC_ALL, 'sl_SI.UTF-8'); // po tem PHP ve, da je Č za C (drugače ga sortira kot zadnji znak in je na koncu tabele)
  2. $array = array("c", "č", "s", "š", "z", "ž");
  3. usort ($array, 'strcoll');

strcoll() uses the current locale for doing the comparisons. If the current locale is C or POSIX, this function is equivalent to strcmp().

#2 Popravljanje č,š,ž,Č,Š,Ž
Ena možnost je, da vse šumnike nadomestite s (predno spremenite encoding datoteke v UTF-8):

  • č - Č || Č - č
  • ž - Ž || Ž - ž
  • š - Š || Š - š

... saj boste v nasprotnem primeru, ko boste datoteko shranili in ponovno prebrali v UTF-8 namesto šumnikov dobili ???.

#3 Delo s stringi v PHP
Ko imate enkrat vse podatke v UTF-8 morate v PHP-ju za stringe uporabljati mb_xyz funkcije. Nekaj primerov:

  • mb_strtoupper("tole je č š ž Č Š Ž test", "UTF-8"); // spreminjanje v velike črke
  • mb_convert_encoding("tole je č š ž Č Š Ž test", "UTF-8", "ISO-8859-1"); // konvertiranje iz ISO-8859-1 v UTF-8

Dodatne informacije:

Blogi:

Deli s skupnostjo:

  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks

Podobni članki:

  1. Stalni UTF-8 problemi – utf8 mysql php – čšž šumniki težave – iskanje znaki – mysql like
  2. PHP – delo z UTF-8 stringi oz. podatki – težave s šumniki (č,š,ž)
  3. Konverzija CP1250, ISO-8859-1 baze v UTF-8 – šumniki UTF-8 – cp1250 to utf8
  4. Zen Cart – UTF-8 podpora – pretvorba
  5. UTF-8 tabele, vendar latin1 podatki ter povezava
  6. Rezanje teksta po koncu besede – php funkcija – substr – cut text – UTF-8
  7. PHP – Konvertiranje datotek CP1250, UTF-8 – iconv
  8. Pretvorba PHP MySQL aplikacije v PHP MS SQL aplikacijo (apache, php, mdb2, mysql => iis, php, mdb2, mssql)
  9. Zend Search Lucene – UTF8 podpora – iconv težave
  10. PHP – Zen Cart – Easy Populate – UTF8 podpora – UTF8 support

29x komentirano na “Šumniki – UTF-8 – Težave – PHP & MySQL”

  1. zaxy je napisal:

    samo en podatek... notepad++ brez problema shranjuje v UTF 8 without BOM. Vsaj najnovejše različice. Za nazaj pa se ne spomnem ravno. Vem pa, da so se nekateri pritoževali, da notepad++ shranjuje z BOM.

  2. Roky je napisal:

    Aha, možno, vem da so imeli nekateri težave s tem pa sem hotel izpostavit, da je to eden izmed možnih problemov.

  3. Mesko je napisal:

    Notepad++ je imel ja težavo szi shranjevanjem UTF-8, vendar je odpravljena ;) Uporabljam Notepad++ od vsega začetka pa še nisem imel problemov s šumniki in BOMom. Sem pa probal ZendStudio in Eclipse, vendar mi nista ravno všeč ...

  4. Roky je napisal:

    Jest sem zaenkrat na ZendStudio, mi je še najbolj všeč, le debug se moram še spravit uporabljat:P

  5. ace je napisal:

    6. točka ni ravno resnična. MySQL zna pretvarjati med charseti, tako da je čisto vseeno v katerem charsetu je sama baza.

  6. Roky je napisal:

    Zna pretvarjati, ampak če uporabljaš povsod UTF-8 (kar je bil pri tem članku cilj, da spravmo is latin1 v utf-u), potem je fajn če je tudi baza UTF-8.

    Se pa strinjam, da zna pretvarjati in da je to tudi opcija (CAST, CONVERT).

  7. ace je napisal:

    Roky> pri pretvorbi sem mislil situacijo, ko imaš bazo v recimo latin2 in preprosto narediš samo SET NAMES utf8 na nivoju query-ev pa potem delaš z bazo kot da je utf8.

  8. Roky je napisal:

    Pa si ziher, da ORDER BY 'cčsšzžČŠŽĐĆ' dela pravilno ko so multi-byte characterji?

  9. ace je napisal:

    Seveda deluje. Sicer sem v praksi rabil do zdaj le omenjeni primer, ko je baza v latin2 vse ostalo pa utf8, ampak mislim, da na isti način deluje tudi z ostalimi charseti.

  10. Roky je napisal:

    Zdi se mi ekstra čudno za ta ORDER BY, tukaj je recimo podoben razložen:

    http://www.onphp5.com/article/6

    Quote: The problem with these defaults is that they cannot be used to sort non-English strings. Our solution is to use Unicode, or, more specifically, the UTF-8 character set.

    ... nisem pa sam probal, tko da težko trdim kaj je res in kaj ne.

  11. ace je napisal:

    Kaj pa vem, tale post je več kot 1 leto star. V tem času so tudi na MySQL-u že kaj ukrenili.
    Skratka, garantiram ti da ko latin šumnike iz baze bereš preko SET NAMES utf8 je Č takoj za Cjem, Š za Sjem in Ž za Zjem. :)

  12. Roky je napisal:

    Če je tako, ti verjamem. Zanimiva rešitev in en info več:P

  13. Iskalni rezultati - statistika - Google Analytic - trsplet | .: TRSplet - internetne storitve .: je napisal:

    [...] UTF-8 - šumniki - čšž [...]

  14. Uporabni HTML meta tagi - PHP header | .: TRSplet - internetne storitve .: je napisal:

    [...] Šumniki - UTF-8 - Težave - PHP & MySQL [...]

  15. Zen Cart - UTF-8 podpora - pretvorba | .: TRSplet - internetne storitve .: je napisal:

    [...] V database objektu moramo dodati query, ki nastavi UTF-8 povezavo med MySQL in PHP [...]

  16. PHP - delo z UTF-8 stringi oz. podatki - težave s šumniki (č,š,ž) | .: TRSplet - internetne storitve .: je napisal:

    [...] Šumniki - UTF-8 - Težave - PHP & MySQL [...]

  17. PHP - pretvorba Excel datoteke v .txt datoteko - Excel to txt converter | .: TRSplet - internetne storitve .: je napisal:

    [...] Drugače boste dobivali zelo čudne napake / rezultate. Več o teh težavah povezanih z BOM znakom. [...]

  18. Tit Petric je napisal:

    Carsko, 10 let zakopan v php pa šele zdajle slišim za strcoll :) ... ah ja, tko je, k mysql deluje!

    Hvala! LP

  19. Roky je napisal:

    Vsak dan nekaj novega:) Me veseli ...

  20. Konverzija CP1250, ISO-8859-1 baze v UTF-8 – šumniki UTF-8 – cp1250 to utf8 | .: TRSplet - internetne storitve :. je napisal:

    [...] 3.) Zaženite http://vasa_domena.si/utf8convert.php 4.) Sledite navodilom kako vašo spletno stran pre-konvertirati v UTF-8 način [...]

  21. Stalni UTF-8 problemi – utf8 mysql php – čšž šumniki težave – iskanje znaki | .: TRSplet - internetne storitve :. je napisal:

    [...] s UTF-8 podporo. Blog iskalnik nam za UTF-8 iskalni niz vrne, kar nekaj rezultatov. Obdelali smo 6 korakov kako do UTF-8 podpore na vaši spletni strani, napisali vodič kako dodati UTF-8 podporo aplikacijam kot je Zen Cart, [...]

  22. Domen je napisal:

    Živjo,

    če slučajno, še komu ne dela pravilno sortiranje usort ($array, 'strcoll');, potem lahko uporabi sledečo rešitev:

    setlocale (LC_ALL, 'sl_SI.UTF-8');
    uksort($gradiva[$ind], 'cmp');

    function cmp($a, $b) {
    return strnatcasecmp($a, $b);
    }

  23. F57 je napisal:

    Se da dobit kakšen napotek, kako v "Filter rezultatov - produkti, ki se začnejo z ...." vstavit še šumnike? Vsa zadeva je že v utf-8 in sicer ni težav, razen za sortiranje izdelkov, ki se začnejo z določeno črko. Tu namreč manjkajo č,š in ž.

  24. Antony je napisal:

    Odvisno katero platformo imaš. Predvidevam, da moraš popraviti prevode oz datoteko, ki generira filter oz iskalnik.

  25. F57 je napisal:

    Zadeva je Zen Cart. V alphabetic filter pa bi še se vstavilo še šumnike, tako da ta filter lahko najde še izdelke začenši z č,š,ž.

  26. Boris je napisal:

    Ali ima še kdo podobne težave z php $_GET ukazom, da "š" ne prepozna kot utf-8, če pa je skupaj z "šč" pa prepozna kot utf-8?

    lp
    Boris

  27. Haydee Krefft je napisal:

    There is visibly a lot to identify about this. I suppose you made various nice points in features also.

  28. kurs tworzenia stron www je napisal:

    whoah this blog is fantastic i love reading your articles. Keep up the good work! You know, a lot of people are looking around for this info, you can aid them greatly.

  29. detective privado je napisal:

    I am really loving the theme/design of your weblog. Do you ever run into any web browser compatibility issues? A handful of my blog audience have complained about my site not working correctly in Explorer but looks great in Safari. Do you have any tips to help fix this issue?

Dodaj komentar