skirtingi php kodai

  1. Leidėjas
  2. x64 (dar žinomas kaip andi)

pradedantiesiems scenarijaus rašytojams nerūpi toks dalykas, kaip kodavimas

pradedantiesiems scenarijaus rašytojams nerūpi toks dalykas, kaip kodavimas. Todėl svetainėse kartais galima rasti siaubingą netvarą, kai duomenų bazėje gauti duomenys gaunami vienu kodavimu, puslapis formuojamas kitame, o serveris - trečias. dėl to, jei puslapis gali būti iššifruotas, tada bent 2 kartus. Taigi, kodėl tokia problema atsitinka ir kaip ją įveikti?

Rusijos segmente dažniausiai galite rasti vadinamuosius „Windows“ koduotes. vadiname jį skirtingai: langai-1251, cp1251 arba netgi ANT. kitas yra utf-8. Taip pat galite rasti pavadinimą unicode, tačiau tai nėra visiškai teisinga, nes Unicode yra bendras pavadinimas visai grupei (utf-8, utf-16, utf-32). ir labai populiarus retumas yra koi8-r arba tiesiog koi-8 - tai populiarus Linux kodavimas. Žinoma, Rusijos segmente galima susitikti ir su kitu, bet tai yra autoriaus „nuoširdumas“.

Pagrindinis skirtumas tarp utf-8 ir kitų (daugiausia langai-1251 ir koi8-r) yra paskutinis vieno baito, o maksimalus simbolių skaičius, kurį galima vaizduoti naudojant šiuos kodavimus, yra ribotas iki 256. gali nepakakti. ir html buvo rastas sprendimas - vadinamųjų mnemonikų naudojimas. pavyzdžiui:

© - & copy;

Be to, kad kiekvienas toks simbolis apibūdinamas simbolių grupe, kodas tampa nesuprantamas, o darbas su tekstu tampa sudėtingesnis. tai yra vieta, kur gelbėti gaus daugelio bitų utf-8. labai patogu naudoti skirtingų abėcėlių raides ir skirtingus simbolius viename tekste.

Taigi patogiausias pradinių sąlygų rinkinys yra toks: duomenų bazės, php scenarijų ir html puslapių / js scenarijų kodavimas turėtų būti toks pat. Žinoma, galite naudoti skirtingus, tačiau šiuo atveju kyla pavojus susipainioti. nesvarbu, koks kodas yra naudojamas. jei svetainė skirta tik rusakalbei auditorijai, „Windows-1251“ bus pakankamai. kitaip utf-8 būtų logiškas pasirinkimas. pirmasis variantas yra daugiau ar mažiau aiškus. Multibyte kodavimas reikalauja tam tikrų gestų.

Dirbant su utf-8, standartinis notepad notepad neveiks ! Faktas yra tai, kad šis redaktorius, įrašydamas failą į šį kodavimą, prideda parašą pradžioje - 3 simboliai, vadinamasis „bom“ (baito eilės ženklas), kurį galima naudoti norint nustatyti kodavimą atidarant failą. geriau pasirinkti kitą redaktorių: notepad2 arba notepad ++ . nustatymuose turite pasirinkti išsaugoti be parašo.

Kitas svarbus žingsnis yra su duomenų baze. Labai pageidautina, kad bazės / lentelės / teksto lauko kodavimas atitiktų scenarijų kodavimą (tai gali būti cp1251 arba utf-8 arba kažkas kitas). jei duomenų bazės duomenys gaunami „zyuk“ forma, greičiausiai ryšio kodavimas skiriasi nuo duomenų bazėje saugomų duomenų. Toliau pateikta užklausa padės įveikti situaciją (vykdoma iškart po prisijungimo prie duomenų bazės):

jei svetainė naudoja „Windows-1251“, turėtumėte tai nurodyti - cp1251.

apskritai nėra nieko sunku. tik standartinės php funkcijos nėra skirtos dirbti su daugialypėmis eilutėmis. tačiau yra standartinių bibliotekų, kurios padės ištaisyti situaciją: iconv ir mbstring . reguliarioms išraiškoms taip pat yra reikalingas jungiklis, kuris aktyvuojamas su modifikatoriumi u .

Na, duomenų bazės duomenys gaunami, scenarijai parašyti pagal visas taisykles. Dar reikia siųsti teisingą pavadinimą ir rodyti puslapio kodą naudotojo naršyklėje. mes siunčiame antraštę taip:

antraštė („Turinio tipas: tekstas / html; charset = utf-8“);

jei naudojamas vieno baito kodavimas, charset vertė bus skirtinga - langai-1251 . Po to problemos neturėtų likti.

Keletas paprasčiausių darbo su utf-8 pavyzdžių php:

1 pavyzdys: piktograma, simbolių skaičius eilutėje

$ s = 'eilutė'; # eilutė utf-8 $ cnt1 = strlen ($ s); # bus reikšmė $ 12 cnt2 = iconv_strlen ($ s, „UTF-8“); # teisinga vertė, 6

2 pavyzdys: mbstring, simbolių skaičius eilutėje

$ s = 'eilutė'; # eilutė utf-8 $ cnt1 = strlen ($ s); # bus $ 12 cnt2 = mb_strlen ($ s, 'UTF-8'); # teisinga vertė, 6

3 pavyzdys: reguliarios išraiškos, paieška ir keitimas

$ s = 'eilutė'; # eilutė utf-8 $ s = preg_replace ('/ p / i', 'd', $ s); # pakeitimas nebus įvykdomas $ s = preg_replace ('/ p / iu', 'd', $ s); # rezultatas žodis dokas

i“ modifikatorius nustato nejautrią paiešką, o u modifikatorius reguliariai išraiškos varikliui nurodo dirbti su utf-8 eilutėmis.

jei kas nors sako, kad php negali dirbti su utf-8, tai bus neteisinga. Jau kelerius metus atlikau visus savo projektus šiame kode ir visai nebuvo jokių problemų. Patys paieškos sistemos jau seniai naudojo šį nuostabų kodavimą.

Leidėjas

neprisijungęs 11 valandų

x64 (dar žinomas kaip andi)

Komentarai: 2846 Leidiniai: 395 Registracija: 02-04-2009

Taigi, kodėl tokia problema atsitinka ir kaip ją įveikti?