turli xil php kodlashlar

  1. Nashriyotchi

Ajam ssenariy mualliflari kodlash kabi narsalarga umuman e'tibor bermaydilar. Shuning uchun, saytlarda siz ba'zan dahshatli bir tartibsizlikni topa olasiz, agar ma'lumotlar bazasidan ma'lumotlar bitta kodlashda olinadigan bo'lsa, sahifa boshqa ko'rinishda tuziladi va server uchinchi marta beriladi. Natijada, sahifa shifrlansa, kamida 2 marta. Xo'sh, nima uchun bunday muammo yuzaga keladi va uni qanday engish mumkin?

rus tilida ko'pincha siz Windows-kodlashni topishingiz mumkin. boshqacha qilib aytganda: windows-1251, cp1251 yoki hatto ansi. Keyingi utf-8. Unicode nomini ham topishingiz mumkin, ammo unicode butun guruh uchun umumiy nomdir (utf-8, utf-16, utf-32). va juda mashhur noyob koi8-r yoki oddiygina koi-8 - bir marta mashhur Linux kodlashdir. Albatta, rus tilida boshqa narsa bilan tanishish mumkin, ammo bu, yozuvchining "xayrixohligi" dir.

Utf-8 va boshqalar o'rtasidagi asosiy farq (birinchi navbatda Windows-1251 va koi8-r) oxirgi bir baytdir va ushbu kodlashlar yordamida taqdim etilishi mumkin bo'lgan belgilarning maksimal soni 256 bilan cheklangan. Bu matnning to'liq taqdimoti uchun etarlicha bo'lmasligi mumkin. va html uchun bir yechim topildi - "mnemonika" deb nomlangan. Masalan:

© - & nusxasi;

Har bir belgi bir qator belgilar bilan ifodalanadigan bo'lsa, kod o'qilmaydi va matn bilan ishlash yanada murakkablashadi. bu ko'pbayt utf-8 qutqaruvga keladigan joy. turli xil alifbo va turli belgilar harflarini bitta matnda ishlatish juda qulay.

Shunday qilib, eng qulay shartli dastlabki shartlar to'plami quyidagicha: ma'lumotlar bazasini kodlash, php skriptlari va html sahifalari / js skriptlari bir xil bo'lishi kerak. Albatta, siz boshqalardan foydalanishingiz mumkin, ammo bu holatda shubhalanish xavfi mavjud. qaysi kod sahifasidan foydalanilganligi muhim emas. agar sayt faqat rus tilida tinglovchilar uchun bo'lsa, Windows-1251 juda etarli bo'ladi. Aks holda, utf-8 mantiqiy tanlovdir. birinchi variant juda kam yoki aniq emas. ko'pbaytli kodlash ba'zi imo-ishoralarni talab qiladi.

Utf-8 bilan ishlashda standart notepad bloknot ishlamaydi ! Haqiqatan ham, ushbu kodlashda faylni saqlashda, bu faylni ochishda kodlashni aniqlash uchun ishlatilishi mumkin bo'lgan bom (baytda buyurtma belgisi) deb nomlangan 3 belgidan boshlanadigan imzo qo'shiladi. boshqa muharrir tanlash yaxshidir: notepad2 yoki notepad ++ . Sozlamalardan imzo qo'ymasdan tanlashingiz kerak.

Keyingi muhim qadam ma'lumotlar bazasi bilan ishlashdir. Asosiy / jadval / matn maydonini kodlash skript kodlashiga mos keladi (bu cp1251 yoki utf-8 yoki boshqa biror narsa bo'lishi mumkin). agar ma'lumotlar bazasidan ma'lumotlar "zyuk" shaklida olingan bo'lsa, ehtimol bu ulanishning kodlashi ma'lumotlar bazasida saqlangan ma'lumotlardan farq qiladi. Quyidagi so'rov vaziyatni bartaraf etishga yordam beradi (ma'lumotlar bazasiga ulangandan keyin darhol bajariladi):

agar sayt Windows-1251 dan foydalansa, uni belgilashingiz kerak - cp1251.

umuman, hech qanday qiyin narsa yo'q. Faqat, standart php vazifalari multibyte strings bilan ishlash uchun mo'ljallanmagan. ammo vaziyatni to'g'rilashga yordam beradigan standart kutubxonalar mavjud: iconv va mbstring . muntazam ifodalar uchun kerakli kalit va modifikator u bilan faollashtirilgan.

Xo'sh, ma'lumotlar bazasidan olingan ma'lumotlar skriptlar barcha qoidalarga muvofiq yoziladi. To'g'ri sarlavhani yuborish va sahifa kodini foydalanuvchining brauzerida ko'rsatish kerak. sarlavhani yuboramiz:

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

agar bitta bayt kodlash ishlatilsa, charset uchun qiymat boshqacha bo'ladi - windows-1251 . Shundan keyin muammolar qolmasligi kerak.

Php-da utf-8 bilan ishlashning eng oddiy misollaridan biri:

1-misol: iconv, har bir satr uchun belgilar soni

$ s = 'string'; utf-8 da string # cnt1 = strlen ($ s); # $ 12 qiymatini o'z ichiga oladi cnt2 = iconv_strlen ($ s, 'UTF-8'); # to'g'ri qiymat, 6

Misol 2: mbstring, satrdagi belgilar soni

$ s = 'string'; utf-8 da string # cnt1 = strlen ($ s); # 12 $ cnt2 = mb_strlen ($ s, 'UTF-8') qiymatini oladi; # to'g'ri qiymat, 6

3-misol: muntazam ifodalar, qidirish va almashtirish

$ s = 'String'; # utf-8 $ sidagi satr = preg_replace ('/ p / i', 'd', $ s); # o'zgartirish amalga oshmaydi $ s = preg_replace ('/ p / iu', 'd', $ s); # Natijada so'z dok

i modifier kassa sezgir qidiruvni belgilaydi va u modifier muntazam ifodali motorni utf-8 satrlari bilan ishlashga aytadi.

agar kimdir php utf-8 bilan ishlamasa, bu noto'g'ri bo'ladi. Bir necha yildan buyon ushbu kodlashdagi barcha loyihalarimni bajarib kelmoqdaman va hech qanday muammo yo'q edi. Qidiruv motorlarining o'zi bu ajoyib kodlashni uzoq vaqtdan beri qo'llagan.

Nashriyotchi

oflayn 11 soat

x64 (aka andi)

Sharhlar: 2846 Nashrlar: 395 Ro'yxatga olish: 02-04-2009Xo'sh, nima uchun bunday muammo yuzaga keladi va uni qanday engish mumkin?