տարբեր PHP կոդավորումներ

  1. Հրատարակչություն
  2. x64 (aka andi)

novice սցենարիստները չեն հետաքրքրում այնպիսի բան, ինչպիսին է կոդավորումը:  Հետեւաբար, կայքերի վրա երբեմն կարող եք գտնել սարսափելի խառնաշփոթ, երբ տվյալների բազայից ստացվում է մեկ կոդավորմամբ, էջը ձեւավորվում է մյուսում, իսկ սերվերին տրվում է երրորդը:  արդյունքում, եթե էջը կարող է վերծանվել, ապա առնվազն 2 անգամ:  Այսպիսով, ինչու է նման խնդիր առաջանում եւ ինչպես հաղթահարել:   ռուսական հատվածում հաճախ կարելի է գտնել այսպես կոչված պատուհանների կոդավորում:  այն անվանում են տարբեր: windows-1251, cp1251 կամ նույնիսկ ansi:  հաջորդը `utf-8:  Դուք կարող եք նաեւ գտնել unicode անունը, բայց դա ամբողջովին ճիշտ չէ, քանի որ Unicode- ը ամբողջ խմբի ընդհանուր անունն է (utf-8, utf-16, utf-32):  եւ շատ սիրված հազվադեպ է koi8-r կամ պարզապես koi-8 - երբեմն հայտնի Linux կոդավորում:  Իհարկե, ռուսական հատվածում հնարավոր է հանդիպել այլ բան, բայց դա հեղինակի «հաճույք» է:   Utf-8- ի եւ մյուսների միջեւ հիմնական տարբերությունը (հիմնականում Windows-1251 եւ koi8-r) վերջին մեկ բայն է, եւ առավելագույն թվով նիշերը, որոնք կարող են ներկայացվել այս կոդավորմամբ, սահմանափակված է 256-ով: Անընդհատ ասվում է, որ այս տեքստի ամբողջական ներկայացման համար կարող է լինել բավարար:  եւ html- ի համար գտել է լուծում, այսպես կոչված, mnemonics- ի օգտագործումը:  օրինակ `   © - եւ պատճենը;   Բացի այն, որ յուրաքանչյուր բնավորությունը նկարագրված է մի շարք կերպարների կողմից, կոդն անընթեռնելի է դառնում, եւ տեքստի հետ աշխատանքը դառնում է ավելի բարդ:  սա այն դեպքն է, երբ multibyte utf-8- ը գալիս է փրկարարական:  դա շատ հարմար է մեկ այլ տառով տարբեր այբուբենների տառերի եւ տարբեր խորհրդանիշների օգտագործման համար:   Այսպիսով, նախնական պայմանների առավել հարմարավետ հավաքածուն հետեւյալն է

novice սցենարիստները չեն հետաքրքրում այնպիսի բան, ինչպիսին է կոդավորումը: Հետեւաբար, կայքերի վրա երբեմն կարող եք գտնել սարսափելի խառնաշփոթ, երբ տվյալների բազայից ստացվում է մեկ կոդավորմամբ, էջը ձեւավորվում է մյուսում, իսկ սերվերին տրվում է երրորդը: արդյունքում, եթե էջը կարող է վերծանվել, ապա առնվազն 2 անգամ: Այսպիսով, ինչու է նման խնդիր առաջանում եւ ինչպես հաղթահարել:

ռուսական հատվածում հաճախ կարելի է գտնել այսպես կոչված պատուհանների կոդավորում: այն անվանում են տարբեր: windows-1251, cp1251 կամ նույնիսկ ansi: հաջորդը `utf-8: Դուք կարող եք նաեւ գտնել unicode անունը, բայց դա ամբողջովին ճիշտ չէ, քանի որ Unicode- ը ամբողջ խմբի ընդհանուր անունն է (utf-8, utf-16, utf-32): եւ շատ սիրված հազվադեպ է koi8-r կամ պարզապես koi-8 - երբեմն հայտնի Linux կոդավորում: Իհարկե, ռուսական հատվածում հնարավոր է հանդիպել այլ բան, բայց դա հեղինակի «հաճույք» է:

Utf-8- ի եւ մյուսների միջեւ հիմնական տարբերությունը (հիմնականում Windows-1251 եւ koi8-r) վերջին մեկ բայն է, եւ առավելագույն թվով նիշերը, որոնք կարող են ներկայացվել այս կոդավորմամբ, սահմանափակված է 256-ով: Անընդհատ ասվում է, որ այս տեքստի ամբողջական ներկայացման համար կարող է լինել բավարար: եւ html- ի համար գտել է լուծում, այսպես կոչված, mnemonics- ի օգտագործումը: օրինակ `

© - եւ պատճենը;

Բացի այն, որ յուրաքանչյուր բնավորությունը նկարագրված է մի շարք կերպարների կողմից, կոդն անընթեռնելի է դառնում, եւ տեքստի հետ աշխատանքը դառնում է ավելի բարդ: սա այն դեպքն է, երբ multibyte utf-8- ը գալիս է փրկարարական: դա շատ հարմար է մեկ այլ տառով տարբեր այբուբենների տառերի եւ տարբեր խորհրդանիշների օգտագործման համար:

Այսպիսով, նախնական պայմանների առավել հարմարավետ հավաքածուն հետեւյալն է. Տվյալների բազայի կոդավորում, php սցենարներ եւ html էջեր / js սցենարներ պետք է լինեն նույնը: Իհարկե, դուք կարող եք օգտագործել տարբեր տարբերակներ, բայց այս դեպքում կա շփոթության վտանգ: Կարեւոր չէ, թե որ կոդն է օգտագործվում: եթե կայքը միայն ռուսախոս հանդիսատեսի համար է, պատուհանները `1251-ը բավական կլինի: Հակառակ դեպքում, utf-8 տրամաբանական ընտրությունը կլինի: առաջին տարբերակն ավելի ու ավելի պարզ է: multibyte կոդավորումը պահանջում է որոշ ժեստեր:

Երբ աշխատում է utf-8, ստանդարտ գրառման գրքույկը չի աշխատի : Փաստն այն է, որ այս խմբագիրն այս կոդավորման մեջ ֆայլ է փակցնում, սկիզբ է առնում ստորագրությունը `3 նիշ, այսպես կոչված, բում (բայտ պատվերի նշան), որը կարող է օգտագործվել ֆայլի բացման ժամանակ կոդավորումը որոշելու համար: ավելի լավ է ընտրել այլ խմբագիր: notepad2 կամ նոտար ++ . պարամետրերում դուք պետք է ընտրեք փրկել առանց ստորագրության:

Հաջորդ կարեւոր քայլը աշխատում է տվյալների բազայի հետ: Ցանկալի է, որ բազայի / աղյուսակի / տեքստի դաշտի կոդավորումը համապատասխանի սցենարի կոդավորմանը (դա կարող է լինել cp1251 կամ utf-8, կամ այլ բան): եթե տվյալների բազայից ստացվում է «zyuk» ձեւով, ամենայն հավանականությամբ կապի կոդավորումը տարբերվում է տվյալների բազայում պահված տվյալներից: Հետեւյալ հարցումը կօգնի հաղթահարել իրավիճակը (տվյալների բազա միանալուց անմիջապես հետո կատարեք):

եթե կայքը օգտագործում է Windows-1251, ապա այն պետք է նշեք `cp1251:

ընդհանրապես դժվար բան չկա: միայն, ստանդարտ php- ի գործառույթները նախատեսված չեն աշխատելու multibyte տողերով: բայց կան ստանդարտ գրադարաններ, որոնք կօգնեն կարգավորել իրավիճակը: iconv եւ mbstring . պարբերաբար արտահայտությունների համար, կա նաեւ անհրաժեշտ փոխարկիչ, որը ակտիվացվում է փոփոխիչ u- ով :

Դե, տվյալների բազայից ստացվող տվյալները, սցենարները գրված են բոլոր կանոնների համաձայն: Մնում է ճիշտ անունը եւ էջի կոդը ցուցադրեք օգտվողի բրաուզերում: մենք վերնագիր ենք ուղարկում.

header ('Content-Type: տեքստ / html; charset = utf-8');

եթե մեկ բայթ կոդավորումը օգտագործվում է, ապա charset- ի արժեքը տարբեր կլինի ` Windows-1251 : Դրանից հետո խնդիրները չպետք է մնան:

Php- ում utf-8- ի հետ աշխատելու որոշ պարզագույն օրինակներ.

Օրինակ 1: iconv, մեկ տողում գտնվող նիշերի թվաքանակը

$ s = 'string'; # string in utf-8 $ cnt1 = strlen ($ s); # պարունակում է արժեք $ 12 cnt2 = iconv_strlen ($ s, 'UTF-8'); # ճիշտ արժեք, 6

Օրինակ 2: mbstring, տողում նիշերի քանակը

$ s = 'string'; # string in utf-8 $ cnt1 = strlen ($ s); # պարունակում է արժեք $ 12 cnt2 = mb_strlen ($ s, 'UTF-8'); # ճիշտ արժեք, 6

օրինակ `3: հերթական արտահայտություններ, որոնում եւ փոխարինում

$ s = 'String'; # line in utf-8 $ s = preg_replace ('/ p / i', 'd', $ s); # Փոխարինումը տեղի չի ունենա $ s = preg_replace ('/ p / iu', 'd', $ s); # արդյունք բառի դոկտ

i- ի փոփոխիչը նախատեսում է գործի աննշան որոնում, եւ u փոփոխիչը պարունակում է utf-8 տողերի հետ աշխատելու հերթական արտահայտիչ շարժիչը:

եթե որեւէ մեկը ասում է, որ php- ը չի կարող աշխատել utf-8- ի հետ, սխալ կլինի: Մի քանի տարի շարունակ այս կոդավորման իմ բոլոր նախագծերն եմ անում եւ ընդհանրապես խնդիրներ չկան: Որոնման համակարգերը վաղուց օգտագործել են այս հրաշալի կոդավորումը:

Հրատարակչություն

անցանց 11 ժամ

x64 (aka andi)

Կարծիքներ. 2846 Հրապարակումներ. 395 Գրանցումը `02-04-2009