erinevad php-kodeeringud

  1. Kirjastaja
  2. x64 (teise nimega andi)

algajad skriptikirjanikud ei hooli kodeeringust

algajad skriptikirjanikud ei hooli kodeeringust. Seega, saitidel võib mõnikord leida kohutav segadus, kui andmebaasi andmed saadakse ühes kodeeringus, moodustatakse leht teises ja serverile antakse kolmas. selle tulemusena, kui lehekülge saab dekrüpteerida, siis vähemalt 2 korda. Niisiis, miks selline probleem juhtub ja kuidas seda ületada?

Vene segmendis leidub kõige sagedamini niinimetatud akna-kodeering. kutsuge seda erinevalt: windows-1251, cp1251 või isegi ANS. järgmine on utf-8. Samuti võite leida nime unicode, kuid see ei ole täiesti õige, sest Unicode on kogu grupi üldnimi (utf-8, utf-16, utf-32). ja väga populaarne haruldus on koi8-r või lihtsalt koi-8 - üks kord populaarne Linuxi kodeering. Muidugi on Vene segmendis võimalik midagi muud täita, kuid see on pigem autori “lubadus”.

Peamine erinevus utf-8 ja teiste vahel (peamiselt aknad-1251 ja koi8-r) on viimane ühe-bait ning maksimaalne arv neid sümboleid kasutades on piiratud 256-ga. ei pruugi olla piisav. ja html jaoks leiti lahendus - nn mnemonika kasutamine. näiteks:

© - & copy;

Lisaks sellele, et iga sellist märki kirjeldab tähemärkide rühm, muutub kood loetamatuks ja tekstiga tehtav töö muutub keerulisemaks. see on koht, kus multibyte utf-8 jõuab päästa. on väga mugav kasutada ühes tekstis erinevaid tähestikke ja erinevaid sümboleid.

Seega on kõige mugavam algtingimuste komplekt järgmine: andmebaasi, php-skriptide ja html-lehekülgede / js-skriptide kodeerimine peaks olema sama. Loomulikult saate kasutada erinevaid, kuid sel juhul on oht segi ajada. see ei ole oluline, millist koodi lehekülge kasutatakse. kui sait on ainult vene keelt kõnelevale publikule, on aknad-1251 piisavalt. vastasel juhul oleks lofiline valik utf-8. esimene valik on enam-vähem selge. Mitmekordne kodeerimine nõuab mõningaid žeste.

Utf-8-ga töötamisel ei tööta tavaline notepad notepad! Fakt on see, et see redaktor salvestab faili kodeeringusse, lisades allkirja algusesse - 3 tähemärki, nn bomi (baitide järjekord), mida saab kasutada faili avamiseks kodeerimise määramiseks. parem on valida teine ​​redaktor: notepad2 või notepad ++ . seadistustes peate salvestama ilma allkirjata.

Järgmine oluline samm on andmebaasi töötamine. On väga soovitav, et baasi / tabeli / tekstivälja kodeering sobiks skripti kodeerimisega (see võib olla cp1251 või utf-8 või midagi muud). kui andmebaasi andmed saadakse "zyuk" vormis, siis tõenäoliselt erineb kodeerimisühendus andmebaasis salvestatud andmetest. Järgmine päring aitab olukorda ületada (käivitada kohe pärast andmebaasi ühendamist):

kui sait kasutab aknaid-1251, peate seda täpsustama - cp1251.

üldiselt ei ole midagi raske. ainult standardseid php funktsioone ei ole loodud töötama mitme stringi abil. kuid on olemas tavalised raamatukogud, mis aitavad olukorda parandada: iconv ja mbstring . regulaaravaldiste puhul on olemas ka vajalik lüliti, mis aktiveeritakse modifikaatoriga u .

Andmebaasi andmed saadakse, skriptid on kirjutatud vastavalt kõigile reeglitele. Jääb õige tiitli saatmine ja lehekülje koodi kuvamine kasutaja brauseris. saadame pealkirja nii:

päis ('Sisu tüüp: text / html; charset = utf-8');

kui kasutatakse ühe baiti kodeeringut, siis on märkide väärtus erinev - windows-1251 . Pärast seda ei tohiks probleemid jääda.

Mõned lihtsamad näited utf-8 töötamisest php-s:

näide 1: ikoonv, tähemärkide arv rea kohta

$ s = 'string'; # string in utf-8 $ cnt1 = strlen ($ s); # sisaldab väärtust $ 12 cnt2 = iconv_strlen ($ s, 'UTF-8'); # õige väärtus, 6

näide 2: mbstring, märkide arv stringis

$ s = 'string'; # string in utf-8 $ cnt1 = strlen ($ s); # sisaldab väärtust $ 12 cnt2 = mb_strlen ($ s, 'UTF-8'); # õige väärtus, 6

näide 3: regulaaravaldised, otsing ja asendamine

$ s = 'String'; # rida utf-8 $ s = preg_replace ('/ p / i', 'd', $ s); # asendamine ei toimu $ s = preg_replace ('/ p / iu', 'd', $ s); # tulemus sõna dokki

i modifikaator määrab juhtumikindla otsingu ja u modifikaator ütleb regulaaravaldise mootorile utf-8 stringidega töötamise.

kui keegi ütleb, et php ei saa utf-8-ga töötada, on see vale. Juba mitu aastat olen teinud kõik oma projektid selles kodeeringus ja üldse ei olnud probleeme. Otsingumootorid ise on seda imelist kodeeringut juba ammu kasutanud.

Kirjastaja

offline 11 tundi

x64 (teise nimega andi)

Kommentaarid: 2846 Väljaanded: 395 Registreerimine: 02-04-2009

Niisiis, miks selline probleem juhtub ja kuidas seda ületada?