različite php kodiranja
pisci skripti novaka ne mare za takvo nešto kao kodiranje. Dakle, na stranicama ponekad možete naći strašan nered, kada se podaci iz baze podataka dobiju u jednom kodiranju, stranica se formira u drugoj, a poslužitelj dobiva treći. kao rezultat, ako se stranica može dešifrirati, tada barem 2 puta. Dakle, zašto se takav problem događa i kako ga prevladati?
u ruskom segmentu najčešće možete pronaći tzv. kodiranje prozora. nazovite ga drugačije: windows-1251, cp1251 ili čak ansi. sljedeći je utf-8. Također možete pronaći ime unicode, ali to nije posve točno, jer je Unicode opći naziv za cijelu grupu (utf-8, utf-16, utf-32). i vrlo popularna rijetkost je koi8-r ili jednostavno koi-8 - nekada popularno Linux kodiranje. Naravno, moguće je susresti još nešto u ruskom segmentu, ali to je radije "popustljivost" autora.
Glavna razlika između utf-8 i drugih (prvenstveno Windows-1251 i Koi8-R) je posljednji bajt, a maksimalni broj znakova koji se mogu prikazati pomoću tih kodiranja ograničen je na 256. Naravno, za cjelovit tekst možda neće biti dovoljno. i za html je pronađeno rješenje - korištenje tzv. mnemotehnike. na primjer:
© - & copy;
Uz činjenicu da je svaki takav karakter opisan skupinom znakova, kôd postaje nečitljiv i rad s tekstom postaje sve složeniji. ovdje spašava multibyte utf-8. vrlo je pogodno koristiti slova različitih pisama i različite simbole u jednom tekstu.
Dakle, najudobniji skup početnih uvjeta je sljedeći: kodiranje baze podataka, php skripte i html stranice / js skripte bi trebalo biti isto. Naravno, možete koristiti različite, ali u ovom slučaju postoji rizik od zbunjenosti. nije važno koja se kodna stranica koristi. ako je stranica namijenjena samo publici koja govori ruski, Windows-1251 će biti sasvim dovoljan. inače, utf-8 bi bio logičan izbor. prva je opcija više ili manje jasna. višekratno kodiranje zahtijevat će neke geste.
Kada radite s utf-8, standardni notepad notepad neće raditi ! Činjenica je da ovaj urednik, prilikom spremanja datoteke u ovom kodiranju, dodaje potpis na početak - 3 znaka, tzv. Bom (oznaka reda bajtova), koji se može koristiti za određivanje kodiranja pri otvaranju datoteke. bolje je odabrati drugi urednik: notepad2 ili notepad ++ , u postavkama koje morate spremiti bez potpisa.
Sljedeći važan korak je rad s bazom podataka. Vrlo je poželjno da se kodiranje baze / tablice / teksta podudara s kodiranjem skripte (to može biti cp1251 ili utf-8, ili nešto drugo). ako su podaci iz baze podataka dobiveni u obliku "zyuk", najvjerojatnije je kodiranje veza različita od podataka pohranjenih u bazi podataka. Sljedeći upit pomoći će prevladavanju situacije (izvršiti odmah nakon povezivanja s bazom podataka):
ako stranica koristi Windows-1251, trebate ga navesti - cp1251.
općenito, ne postoji ništa teško. samo, standardne php funkcije nisu dizajnirane za rad s višekratnim nizovima. ali postoje standardne knjižnice koje će pomoći u ispravljanju situacije: iconv i mbstring , za regularne izraze postoji i nužan prekidač koji se aktivira modifikatorom u .
Dobiveni su podaci iz baze podataka, skripte su napisane prema svim pravilima. Ostaje poslati ispravan naslov i prikazati kôd stranice u korisnikovom pregledniku. šaljemo naslov tako da:
header ('Content-Type: text / html; charset = utf-8');
ako se koristi jednobajtno kodiranje, vrijednost za skup znakova bit će različita - windows-1251 . Nakon toga problemi ne bi trebali ostati.
Neki najjednostavniji primjeri rada s utf-8 u php-u:
primjer 1: iconv, broj znakova po retku
$ s = 'string'; # string u utf-8 $ cnt1 = strlen ($ s); # će sadržavati vrijednost $ 12 cnt2 = iconv_strlen ($ s, 'UTF-8'); # ispravna vrijednost, 6
primjer 2: mbstring, broj znakova u nizu
$ s = 'string'; # string u utf-8 $ cnt1 = strlen ($ s); # će sadržavati vrijednost $ 12 cnt2 = mb_strlen ($ s, 'UTF-8'); # ispravna vrijednost, 6
primjer 3: regularni izrazi, pretraživanje i zamjena
$ s = 'String'; # redak u utf-8 $ s = preg_replace ('/ p / i', 'd', $ s); # zamjena se neće dogoditi $ s = preg_replace ('/ p / iu', 'd', $ s); # rezultat riječ dock
modifikator i propisuje pretragu koja nije osjetljiva na veličinu slova, a modifikator u govori mehanizmu regularnog izraza da radi s nizovima utf-8.
ako netko kaže da php ne može raditi s utf-8, to će biti pogrešno. Već nekoliko godina radim sve svoje projekte u ovom kodiranju i uopće nema problema. Sami pretraživači već dugo koriste ovo predivno kodiranje.
autori
izvan mreže 11 sati
x64 (zv. andi)
Komentari: 2846 Publikacije: 395 Registracija: 02-04-2009
Dakle, zašto se takav problem događa i kako ga prevladati?