rôzne kódovanie php
začínajúci skript spisovatelia sa nestarajú o také veci ako kódovanie. Preto na stránkach môžete niekedy nájsť hrozný neporiadok, keď sa údaje z databázy získajú v jednom kódovaní, stránka sa vytvorí v inom a server dostane tretiu. v dôsledku toho, ak stránku možno dešifrovať, potom aspoň 2 krát. Prečo sa tak stalo a ako ho prekonať?
v ruskom segmente najčastejšie nájdete tzv. kódovanie okien. zavolajte to inak: windows-1251, cp1251 alebo dokonca ansi. ďalšie je utf-8. Môžete tiež nájsť názov unicode, ale to nie je úplne správne, pretože Unicode je všeobecný názov pre celú skupinu (utf-8, utf-16, utf-32). a veľmi populárna rarita je koi8-r alebo jednoducho koi-8 - kedysi populárne kódovanie Linuxu. Samozrejme, v ruskom segmente je možné stretnúť sa s niečím iným, ale je to skôr „zhovievavosť“ autora.
© - & copy;
Okrem toho, že každý takýto znak je opísaný skupinou znakov, kód sa stáva nečitateľným a práca s textom sa stáva komplikovanejšou. toto je miesto, kde multibyte utf-8 príde na záchranu. je veľmi výhodné používať písmená rôznych abeced a rôznych symbolov v jednom texte.
Preto je najpohodlnejší súbor počiatočných podmienok nasledovný: kódovanie databázy, php skripty a html stránky / js skripty by mali byť rovnaké. Samozrejme, môžete použiť aj iné, ale v tomto prípade hrozí riziko zmätku. Nezáleží na tom, ktorá kódová stránka sa používa. ak je stránka iba pre rusky hovoriaceho publika, Windows-1251 bude dosť dosť. inak by utf-8 bola logická voľba. prvá možnosť je viac či menej jasná. viacbajtové kódovanie bude vyžadovať určité gestá.
Pri práci s utf-8 nebude fungovať štandardný poznámkový blok poznámok ! Faktom je, že tento editor pri ukladaní súboru v tomto kódovaní pridáva na začiatok podpis - 3 znaky, tzv. Bom (značku poradia bajtov), ktoré možno použiť na určenie kódovania pri otváraní súboru. je lepšie zvoliť iného editora: Notepad2 alebo poznámkový blok ++ , v nastaveniach musíte zvoliť uloženie bez podpisu.
Ďalším dôležitým krokom je práca s databázou. Je veľmi žiaduce, aby kódovanie základného / tabuľkového / textového poľa zodpovedalo kódovaniu skriptu (mohlo by to byť cp1251 alebo utf-8 alebo niečo iné). ak sa údaje z databázy získajú vo forme "zyuk", s najväčšou pravdepodobnosťou sa kódovanie spojenia líši od údajov uložených v databáze. Nasledujúci dotaz pomôže prekonať situáciu (okamžite po pripojení k databáze):
ak stránka používa Windows-1251, mali by ste ju špecifikovať - cp1251.
vo všeobecnosti nie je nič ťažké. štandardné funkcie PHP nie sú určené na prácu s viacbytovými reťazcami. ale existujú štandardné knižnice, ktoré pomôžu napraviť situáciu: iconv a mbstring , pre regulárne výrazy je tiež potrebný prepínač, ktorý je aktivovaný modifikátorom u .
No, dáta z databázy sú získané, skripty sú napísané podľa všetkých pravidiel. Zostáva poslať správny názov a zobraziť kód stránky v prehliadači používateľa. posielame nadpis tak:
hlavička ('Content-Type: text / html; charset = utf-8');
ak sa použije jednobajtové kódovanie, hodnota znakovej sady bude odlišná - windows-1251 . Potom by nemali zostať problémy.
Niektoré najjednoduchšie príklady práce s utf-8 v php:
príklad 1: iconv, počet znakov na riadok
$ s = 'reťazec'; # string v utf-8 $ cnt1 = strlen ($ s); # bude obsahovať hodnotu $ 12 cnt2 = iconv_strlen ($ s, 'UTF-8'); # správna hodnota, 6
príklad 2: mbstring, počet znakov v reťazci
$ s = 'reťazec'; # string v utf-8 $ cnt1 = strlen ($ s); # bude obsahovať hodnotu $ 12 cnt2 = mb_strlen ($ s, 'UTF-8'); # správna hodnota, 6
príklad 3: regulárne výrazy, vyhľadávanie a nahrádzanie
$ s = 'String'; # riadok v utf-8 $ s = preg_replace ('/ p / i', 'd', $ s); # nahradenie sa nestane $ s = preg_replace ('/ p / iu', 'd', $ s); # výsledok slovo dock
modifikátor i predpisuje vyhľadávanie nerozlišujúce veľké a malé písmená a modifikátor u hovorí motoru s regulárnym výrazom, aby pracoval s reťazcami utf-8.
ak niekto povie, že php nemôže pracovať s utf-8, bude to nesprávne. Už niekoľko rokov robím všetky svoje projekty v tomto kódovaní a vôbec neboli žiadne problémy. Vyhľadávače samy o sebe už dávno používajú toto nádherné kódovanie.
Autori
offline 11 hodín
x64 (aka andi)
Komentáre: 2846 Publikácie: 395 Registrácia: 02-04-2009
Prečo sa tak stalo a ako ho prekonať?