olika PHP-kodningar

  1. Författare
  2. x64 (aka andi)

nybörjare manusförfattare bryr sig inte om en sådan sak som kodning

nybörjare manusförfattare bryr sig inte om en sådan sak som kodning. Därför kan du på webbplatser ofta hitta en fruktansvärd röra, när data från databasen erhålls i en kodning bildas sidan i en annan, och servern ges den tredje. Som ett resultat, om sidan kan dekrypteras, då minst 2 gånger. Så, varför händer ett sådant problem och hur man kan övervinna det?

I det ryska segmentet kan du oftast hitta den så kallade Windows-kodningen. kalla det annorlunda: windows-1251, cp1251 eller till och med ansi. Nästa är utf-8. Du kan också hitta namnet unicode, men det här är inte helt korrekt, eftersom Unicode är det allmänna namnet för hela gruppen (utf-8, utf-16, utf-32). och en mycket populär sällsynthet är koi8-r eller helt enkelt koi-8 - den en gång populära Linux-kodningen. Det är självklart möjligt att träffa något annat i det ryska segmentet, men det är snarare en "övertygelse" av författaren.

Huvudskillnaden mellan utf-8 och andra (främst windows-1251 och koi8-r) är den sista enbyten och det maximala antalet tecken som kan representeras med dessa kodningar är begränsat till 256. Det är självklart att för en fullständig presentation av denna text kanske inte räcker. och för html hittades en lösning - användningen av så kallade mnemonics. till exempel:

© - & copy;

Förutom det faktum att varje sådan karaktär beskrivs av en grupp karaktärer, blir koden oläslig och arbetet med texten blir mer komplicerat. detta är där multibyte utf-8 kommer till undsättning. Det är mycket bekvämt att använda bokstäver i olika alfabet och olika symboler i en text.

Således är den mest bekväma uppsättningen av initiala villkor som följer: kodningen av databasen, php-skript och html-sidor / js-skript borde vara densamma. Naturligtvis kan du använda olika, men i det här fallet finns risk för att bli förvirrad. Det spelar ingen roll vilken kodsida som används. Om webbplatsen bara är för en rysktalande publik, kommer Windows-1251 att vara tillräckligt. annars skulle utf-8 vara det logiska valet. Det första alternativet är mer eller mindre klart. multibyte kodning kommer att kräva några gester.

När du arbetar med utf-8, fungerar inte en standard anteckningsblankett! Faktum är att den här redigeraren, när du lagrar en fil i den här kodningen, lägger till en signatur i början - 3 tecken, det så kallade bombenet (byte-ordning) som kan användas för att bestämma kodningen när en fil öppnas. det är bättre att välja en annan redaktör: Notepad2 eller anteckningsblock ++ . I inställningarna måste du välja att spara utan en signatur.

Nästa viktiga steg är att arbeta med databasen. Det är mycket önskvärt att kodningen av bas / tabell / textfält matchar skriptkodningen (det kan vara cp1251 eller utf-8 eller något annat). om data från databasen erhålls i form av "zyuk", är det troligt att kodningen av anslutningen skiljer sig från data lagrad i databasen. Följande fråga hjälper till att övervinna situationen (kör direkt efter anslutning till databasen):

Om webbplatsen använder Windows-1251, ska du ange det - cp1251.

i allmänhet är det inget svårt. bara de vanliga php-funktionerna är inte konstruerade för att fungera med multibyte strängar. men det finns standardbibliotek som hjälper till att rätta till situationen: iconv och mbstring . för regelbundna uttryck finns det också en nödvändig omkopplare som aktiveras med modifieraren u .

Tja, data från databasen erhålls, skripten är skrivna enligt alla regler. Det återstår att skicka rätt titel och visa sidkoden i användarens webbläsare. vi skickar rubriken så:

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

om enkångbytekodning används kommer värdet för charset att vara annorlunda - windows-1251 . Därefter borde problem inte förbli.

Några enklaste exempel på att arbeta med utf-8 i php:

Exempel 1: iconv, antal tecken per rad

$ s = 'sträng'; # sträng i utf-8 $ cnt1 = strlen ($ s); # kommer att innehålla värdet $ 12 cnt2 = iconv_strlen ($ s, 'UTF-8'); # korrekt värde, 6

Exempel 2: mbstring, antalet tecken i en sträng

$ s = 'sträng'; # sträng i utf-8 $ cnt1 = strlen ($ s); # kommer att innehålla värdet $ 12 cnt2 = mb_strlen ($ s, 'UTF-8'); # korrekt värde, 6

Exempel 3: Vanliga uttryck, sök och ersätt

$ s = 'String'; # rad i utf-8 $ s = preg_replace ('/ p / i', 'd', $ s); # ersättning kommer inte att hända $ s = preg_replace ('/ p / iu', 'd', $ s); # resultatorddocka

I modifieraren föreskrivs obestämd sökning, och u modifieraren berättar den reguljära expressionsmotorn att arbeta med utf-8 strängar.

om någon säger att php inte kan fungera med utf-8, kommer det att bli fel. I flera år har jag gjort alla mina projekt i denna kodning och det fanns inga problem alls. Sökmotorer själva har länge använt denna underbara kodning.

Författare

Offline 11 timmar

x64 (aka andi)

Kommentarer: 2846 Publikationer: 395 Registrering: 02-04-2009