različna kodiranja php

  1. Založnik
  2. x64 (alias)

pisatelji začetnikov skripta ne marajo takega pojma, kot je kodiranje

pisatelji začetnikov skripta ne marajo takega pojma, kot je kodiranje. Torej, na straneh, ki jih lahko včasih najdete grozno nered, ko se podatki iz baze podatkov pridobijo v enem kodiranju, se stran oblikuje v drugem in strežnik dobi tretji. posledično, če je stran mogoče dešifrirati, potem vsaj 2-krat. Torej, zakaj se zgodi tak problem in kako ga premagati?

v ruskem segmentu najpogosteje najdete tako imenovano kodiranje oken. pokličite ga drugače: windows-1251, cp1251 ali celo ansi. naslednji je utf-8. Prav tako lahko najdete ime unicode, vendar to ni povsem pravilno, saj je Unicode splošno ime za celotno skupino (utf-8, utf-16, utf-32). in zelo priljubljena redkost je koi8-r ali preprosto koi-8 - nekoč priljubljeno kodiranje Linuxa. Seveda je v ruskem segmentu mogoče spoznati še nekaj drugega, vendar je to bolj »popustljivost« avtorja.

Glavna razlika med utf-8 in ostalimi (predvsem windows-1251 in koi8-r) je zadnji enobajtni, največje število znakov, ki jih je mogoče predstaviti z uporabo teh kodiranja, je omejeno na 256. Samoumevno je, da za popolno predstavitev besedila tega morda ne bo dovolj. in za html je bila najdena rešitev - uporaba tako imenovane mnemotehnike. na primer:

© - & copy;

Poleg dejstva, da je vsak tak lik opisan s skupino znakov, postane koda neberljiva in delo z besedilom postane bolj zapleteno. Tukaj rešuje multibyte utf-8. zelo priročno je uporabiti črke različnih abeced in različnih simbolov v enem besedilu.

Tako je najbolj udoben nabor začetnih pogojev: kodiranje podatkovne baze, php skripte in html strani / js skripte bi moralo biti enako. Seveda lahko uporabite različne, toda v tem primeru obstaja tveganje, da boste zmedeni. ni pomembno, katera kodna stran se uporablja. če je spletna stran samo za rusko govoreče občinstvo, bo Windows-1251 dovolj. drugače bi bila utf-8 logična izbira. prva možnost je bolj ali manj jasna. Večbajtno kodiranje bo zahtevalo nekaj gibov.

Pri delu z utf-8 standardna notepad notepad ne bo delovala ! Dejstvo je, da ta urejevalnik pri shranjevanju datoteke v to kodiranje doda podpis na začetek - 3 znake, tako imenovani bom (oznaka bajtnega reda), ki se lahko uporabi za določanje kodiranja pri odpiranju datoteke. bolje je izbrati drugega urejevalnika: notepad2 ali notepad ++ . v nastavitvah, ki jih morate shraniti brez podpisa.

Naslednji pomemben korak je delo z bazo podatkov. Zelo zaželeno je, da se kodiranje baznega / tabelnega / besedilnega polja ujema s kodiranjem skripta (lahko je cp1251 ali utf-8 ali kaj drugega). če so podatki iz baze podatkov pridobljeni v obliki "zyuk", je verjetno, da je kodirna povezava drugačna od podatkov, shranjenih v bazi podatkov. Naslednja poizvedba bo pomagala premagati situacijo (izvršiti takoj po povezavi z bazo podatkov):

če spletno mesto uporablja windows-1251, ga morate podati - cp1251.

na splošno ni nič težkega. samo, standardne funkcije php niso zasnovane za delo z večobitnimi nizi. vendar obstajajo standardne knjižnice, ki bodo pomagale popraviti situacijo: iconv in mbstring . pri regularnih izrazih obstaja tudi potrebno stikalo, ki se aktivira z modifikatorjem u .

No, podatki iz baze podatkov so pridobljeni, skripti so napisani v skladu z vsemi pravili. Še vedno morate poslati pravilen naslov in prikazati kodo strani v brskalniku uporabnika. naslov pošljemo tako:

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

če se uporablja enobajtno kodiranje, bo vrednost za nabor znakov drugačna - windows-1251 . Po tem problemi ne bi smeli ostati.

Nekaj ​​najpreprostejših primerov dela z utf-8 v php:

primer 1: ikona, število znakov na vrstico

$ s = 'string'; # string v utf-8 $ cnt1 = strlen ($ s); # bo vsebovala vrednost $ 12 cnt2 = iconv_strlen ($ s, 'UTF-8'); # pravilna vrednost, 6

primer 2: mbstring, število znakov v nizu

$ s = 'string'; # string v utf-8 $ cnt1 = strlen ($ s); # bo vsebovala vrednost $ 12 cnt2 = mb_strlen ($ s, 'UTF-8'); # pravilna vrednost, 6

primer 3: regularni izrazi, iskanje in zamenjava

$ s = 'String'; # vrstica v utf-8 $ s = preg_replace ('/ p / i', 'd', $ s); # zamenjava se ne bo zgodila $ s = preg_replace ('/ p / iu', 'd', $ s); # dok

modifikator i predpisuje iskanje, ki ni občutljivo na velikost črk in modifikator u ukaže motorju regularnega izraza, da dela z nizi utf-8.

če nekdo pravi, da php ne more delati z utf-8, bo to narobe. Že več let delam vse svoje projekte v tem kodiranju in sploh ni bilo nobenih težav. Iskalniki sami že dolgo uporabljajo to čudovito kodiranje.

Založnik

brez povezave 11 ur

x64 (alias)

Komentarji: 2846 Publikacije: 395 Registracija: 02-04-2009

Torej, zakaj se zgodi tak problem in kako ga premagati?