Codificare HTML utf 8. Codificare pagini HTML

Vlad Merjevici

Metaetichetele sunt folosite pentru a stoca informații destinate browserelor și motoarelor de căutare. De exemplu, motoarele de căutare accesează metaetichete pentru a obține o descriere a unui site, cuvinte cheie si alte date.

Meta-etichete pentru motoarele de căutare

Există o opinie în rândul dezvoltatorilor de site-uri web potrivit căreia metaetichetele scrise corect vă permit să ajungeți la rândurile de sus servere de căutare.

De fapt, acest lucru nu este adevărat, nu vă veți ridica la înălțime numai pe meta-etichete, dar conținutul de meta-etichetă executat prost poate înrăutăți clasamentul unui site.

Două meta-etichete sunt concepute special pentru motoarele de căutare: descriere și cuvinte cheie. Unii webmasteri au adăugat cuvinte cheie la secțiunea de cuvinte cheie care nu au nicio legătură cu subiectul site-ului, dar s-au bucurat totuși de un oarecare succes în rândul vizitatorilor motoarelor de căutare. Cu toate acestea, după ceva timp, motoarele de căutare au învățat să facă față acestui fenomen și să verifice conținutul paginii web pentru conformitatea cu cuvintele cheie menționate.

  • Câteva principii legate de metaetichete:
  • nu includeți cuvinte cheie care nu sunt conținute în paginile dvs.;
  • nu repeta cuvintele cheie;
  • utilizați meta-etichete în scopul propus;

faceți descrierea și lista de cuvinte cheie diferite pentru fiecare pagină a site-ului, ținând cont de conținut.

descriere

Majoritatea motoarelor de căutare afișează conținutul câmpului de descriere (exemplul 1) atunci când afișează rezultatele căutării.

faceți descrierea și lista de cuvinte cheie diferite pentru fiecare pagină a site-ului, ținând cont de conținut.

Exemplul 1: Utilizarea descrierii

Site despre HTML și crearea de site-uri web cuvinte cheie Această metaetichetă a fost menită să descrie cuvintele cheie care apar pe pagină (Exemplul 2). Dar ca urmare a acțiunilor oamenilor care doresc să intre

liniile de sus

Exemplul 1: Utilizarea descrierii

Prin urmare, multe motoare de căutare omit acest parametru. Exemplul 2: Utilizarea cuvintelor cheie HTML, META, metaetichetă, etichetă, motor de căutare

Cuvintele cheie pot fi listate separate prin spații sau virgule.

Motoarele de căutare Ei înșiși vor aduce înregistrarea în forma pe care o folosesc.Încărcare automată a paginilor



Browserul va înțelege această intrare să aștepte 5 secunde și apoi să încarce noua pagină specificată în parametrul URL, în acest caz un link către site-ul site-ului.

Această metaetichetă vă permite să creați o redirecționare către un alt site.

Dacă nu este specificată nicio adresă URL, pagina curentă se va reîmprospăta automat după numărul de secunde specificat în atributul de conținut.

Codificare Pentru a spune browserului în ce codificare se află caracterele de pe o pagină web, trebuie să setați parametrul

. Pentru sistemul de operare Windows și alfabetul chirilic, setul de caractere ia de obicei valoarea utf-8 sau windows-1251 (exemplul 4).

Dacă nu este specificată nicio adresă URL, pagina curentă se va reîmprospăta automat după numărul de secunde specificat în atributul de conținut.

Exemplul 4. Selectarea codificării curente



chirilic

Dacă nu este specificată nicio codificare, browserul însuși încearcă să determine ce tip de caractere este folosit în document și selectează automat codificarea necesară.

Este posibil ca browserul să nu recunoască întotdeauna cu acuratețe limba unei pagini web și, în unele cazuri, va sugera codificarea vietnameză în loc de chirilica. Din acest motiv, este mai bine să includeți întotdeauna linia dată. Cu toate acestea, există circumstanțe în care specificarea codificării poate provoca anumite prejudicii. De exemplu, serverul web folosește automat transcodarea datelor în KOI-8, iar browserul, când întâlnește parametrul charset=windows-1251, convertește textul în codificare Windows. Acest lucru are ca rezultat o dublă schimbare de caractere, nu este ușor de citit. Din fericire, o astfel de problemă este deja de domeniul trecutului, în orice caz, poate fi ușor identificată și neutralizată la nivel de server.

Pentru ca paginile site-ului dvs. să fie afișate corect în toate browserele și pe tot felul de dispozitive, trebuie să aveți grijă să setați codificarea corectă. Nerespectarea unor condiții, pe care le vom discuta în detaliu astăzi, poate duce la faptul că textul se transformă într-un set de caractere fără sens care sunt pur și simplu imposibil de citit (krakozyabry).

Browserele moderne pot determina ele însele codificarea documentului dacă webmasterul a uitat să-l specifice în mod explicit. Uneori se întâmplă să apară neconcordanțe între „opinia” browserului și realitate, de unde un set de caractere care nu pot fi citite. Un set de prostii poate lua forme diferite, uneori vor fi doar simboluri ciudate, similare cu hieroglifele antice, iar uneori doar întrebări sau întrebări în interiorul diamantelor negre. În general, nu este atât de important ce fel de porcării afișează browserul, dar ceea ce este important este că o persoană nu le poate citi.

Dacă te confrunți cu problema unei codificări specificate incorect și vezi pe site-ul tău ceva ce nu poți citi, în primul rând, folosește un Decodor special dezvoltat în studioul lui Artemy Lebedev. Pentru a face acest lucru, pur și simplu copiați textul pe care doriți să-l decriptați, lipiți-l în câmpul special și faceți clic pe „Decriptați”. Dacă decodarea are succes, veți vedea textul deja lizibil, precum și codificarea originală și calea prin care a trebuit să o parcurgă programul pentru a scoate rezultatul.

Toate acestea sunt necesare, mai degrabă, pentru utilizatorii avansați, pentru care informațiile primite le pot ajuta într-un fel. Poate că rezultatul acțiunilor programului vă va oferi o idee și vă veți da seama de unde vin escrocii de pe site-ul dvs. și veți corecta rapid situația. Și dacă manipulările făcute nu vă spun absolut nimic, atunci să mergem mai departe.

Cum să alegi codificarea corectă

În acest articol, nu vom aprofunda ce tipuri de codificări există și cum diferă între ele, deoarece... Nu vrem să ne supraîncărcăm nici pe noi, nici pe dumneavoastră cu informații inutile și, în sensul articolului de astăzi, nu a fost cazul. Este demn de remarcat doar faptul că pe un site în limba rusă nu are absolut niciun rost să instalați codificarea Windows-1251, care este descrisă exhaustiv în minunatul articol Wikipedia. Chiar dacă toate textele de pe el vor fi scrise exclusiv în limba rusă și nu vor exista incluziuni de caractere nestandard. În schimb, trebuie doar să alegeți codificarea universală UTF-8, luând acest lucru ca un dat, fără a vă deranja capul cu informații inutile.

Cert este că nu are rost să alegi o codificare pentru site-ul tău care acceptă doar caractere din limbi slave, cum ar fi rusă, ucraineană, belarusă, sârbă, macedoneană și bulgară. De ce să te limitezi de la început și să te condamne la posibile probleme în viitor. Ce veți face dacă trebuie să introduceți un caracter care nu este acceptat?

UTF-8 (din limba engleză Unicode Transformation Format) este un format de transformare Unicode pe opt biți care a primit recunoaștere la nivel mondial și a fost standardizat tocmai pentru a evita problemele asociate cu apariția de farfurii și confuzia cu textele care nu pot fi citite. Din care putem concluziona cu siguranță că, în acest caz, trebuie să alegeți cel mai mare dintre cele două rele și să dormiți liniștit, fără a intra în detalii, pentru că totul este clar aici. Uită-te la dimensiunea lui Jupiter și a lui Venus pentru comparație.

Modalități de bază de a seta codificarea corectă

Destul de des, problemele cu codificarea site-ului apar nu pentru că nici una dintre condițiile despre care vă vom spune nu a fost îndeplinită, ci este suficient să nu îndepliniți doar una dintre ele pentru ca textul de pe site-ul dvs. să înceapă să se afișeze incorect. După ce setați codificarea folosind toate metodele de mai sus, problema va fi rezolvată cu o probabilitate de 99,9%. Am ajuns la această concluzie pe baza multor ani de experiență în lucrul cu site-uri web pe diverse platforme de găzduire, folosind o varietate de sisteme de administrare și setări de server.

Codificare în .htaccess - AddDefaultCharset

În primul rând, trebuie să setați codarea implicită a tuturor paginilor de pe site folosind o directivă htaccess foarte utilă - AddDefaultCharset, care înseamnă literal „Adăugați DefaultCharset”. Acest lucru se face foarte simplu:

AddDefaultCharset UTF-8

Dacă nu știi ce este , apoi creați pur și simplu un fișier text în Notepad și apoi, folosind Total Commander, redenumiți-l într-un fișier fără titlu cu extensia HTACCESS ( - exact așa ar trebui să arate numele complet al fișierului dvs.). După aceea, încărcați fișierul nou creat în directorul rădăcină al site-ului dvs. (în același loc în care se află fișierul executabil principal, de exemplu index.php). Și nu uitați să introduceți linia cu codificarea implicită pe care tocmai am furnizat-o.

Codificare folosind metacarset

Metaetichetele sunt capabile să trimită informații despre pagină către browser sub formă de antete speciale, dintre care unul este exact ceea ce avem nevoie - set de caractere. În general, metaetichetele pot avea până la 4 atribute diferite:

  1. conţinut;
  2. http-echiv;
  3. nume;
  4. sistem.

De fapt, dintre cele patru atribute prezentate, doar unul este necesar - conţinut, dar există și excepții. De exemplu, în cazul nostru, vom folosi o versiune scurtată a intrării și vom seta codarea folosind metaeticheta exact așa:

Vechiul format de înregistrare a căzut de mult în uitare și nu mai are rost să-l folosești:

După cum știți, metaetichetele sunt de obicei plasate în interiorul containerului cap. Toată lumea, fără excepție, probabil știe deja despre asta. Faceți această operațiune și vom trece la următorul articol din lista noastră.

Codificarea fișierelor folosind funcția PHP antet

Această metodă este potrivită doar pentru cei care au un site web implementat folosind cel mai popular limbaj de programare în acest moment, concentrat mai ales pe crearea de site-uri web - PHP (Hyper Text Preprocessor). Pentru a rezolva problema pusă în acest articol, vom folosi minunata funcție încorporată header(), concepută pentru a trece anteturi, asemănătoare meta tag-urilor, dar cu ușoară diferență că acțiunea este efectuată dintr-un script PHP, și nu prin intermediul Ieșire cod HTML.

Setați codificarea UTF-8 pentru un fișier utilizând funcția antet() destul de simplu - trebuie doar să lipiți codul dat chiar la începutul paginii, dar bineînțeles în domeniul PHP, care este notat astfel:sau cam asa ceva -.

Antet ("Content-type: text/html; charset=utf-8");

Cel mai important punct aici este că avem dreptul de a transmite antete numai dacă nu a existat nicio ieșire din script înainte. De aceea inserăm acest cod chiar la începutul paginii. Trebuie să faceți acest lucru cu înțelepciune și să înțelegeți bine ce se întâmplă, deoarece puteți fi sigur că introduceți un antet la începutul fișierului, dar este posibil să nu știți că acest fișier este folosit într-un alt fișier în care este este tras folosind funcția cere sau include după ce anumite informații au fost afișate pe ecran. Prin urmare, dacă nu înțelegeți prea bine despre ce vorbim acum, este mai bine să treceți la pasul următor și să reveniți la acesta dacă cele 3 anterioare nu au ajutat la setarea corectă a codificării paginilor site-ului dvs.

Salvarea fișierelor în codificarea corectă

Unul dintre, probabil, cele mai frecvente motive pentru apariția fisurilor pe un site web este codificarea incorectă a fișierelor în sine utilizate pentru a genera documentul final. Cel mai adesea, această problemă apare în rândul programatorilor începători care tocmai fac primii pași în stăpânirea artei. Atunci când unul dintre sistemele de administrare populare în prezent este selectat ca motor de site, această problemă poate apărea în cazuri foarte rare, dar dacă este utilizat, atunci acest lucru se întâmplă în aproape fiecare al treilea caz.

După cum am convenit mai devreme, codificarea pe care o folosim pe toate, chiar și pe cele mai sofisticate site-uri în limba rusă, este UTF-8, așa că vom codifica toate fișierele care compun motorul site-ului în același format. Și pentru a modifica codificarea fișierului în sine, încărcat pe server, obișnuitul blocnotes furnizat de sistemul de operare Windows nu va fi, desigur, suficient. Prin urmare, este mai bine să utilizați un program terță parte distribuit gratuit - Notepad++, care poate fi descărcat de pe site-ul oficial fără probleme.

După ce ați finalizat cu succes procesul simplu de instalare, va trebui să atribuiți acest program ca editor implicit, să faceți unele setări după gust și să modificați codificarea fișierului afișat incorect în același mod ca în captură de ecran. Aceste. trebuie să selectați „Codificare în UTF-8 (fără BOM)”. Un semn bun că acesta a fost cazul este că inițial niciuna dintre opțiuni nu va fi selectată și vi se va solicita „Conversia în UTF-8 (fără BOM).” Dacă vedeți acest lucru, asigurați-vă că au mai rămas doar câteva secunde înainte de a rezolva problema de codificare.

În plus, vreau doar să spun că trebuie să alegi exact fără BOM. În caz contrar, dacă codificați pur și simplu în UTF-8 (cu BOM), atunci vor fi creați octeți suplimentari la începutul fișierului. Ei încearcă să nu folosească BOM - Byte Order Mark pe web atunci când codifică în format UTF-8, deoarece acest lucru duce la erori prin interferarea cu interpretarea corectă PHP.

Ei bine, acum că toți pașii necesari au fost parcurși, cel mai probabil vei vedea text ușor de citit pe paginile site-ului tău și vei respira ușor :)

Dacă ați fi întrebat „Cum este UTF-8 diferit de Unicode?”, ați fi încrezător în a oferi un răspuns clar? În aceste zile de internaționalizare, toți dezvoltatorii ar trebui să facă acest lucru. Cred că mulți dintre noi nu diferențiază corect aceste concepte. Dacă simțiți că aparțineți acelui grup, ar trebui să citiți această introducere ultra-scurtă la seturile de caractere și codificări.

De fapt, compararea UTF-8 și Unicode este ca și cum ați compara merele și portocalele: UTF-8 este o codificare;

Unicode este un set de caractere.

O codificare este un algoritm care convertește numerele (numerele dintr-un set de caractere) în cod binar pe care o mașină îl poate înțelege. De exemplu, secvența „1 2 3 4” în codificarea UTF-8 ar fi scrisă ca:

00000001 00000010 00000011 00000100

Acum totul este împreună

Să presupunem că o aplicație citește următoarele informații de pe disc:

1101000 1100101 1101100 1101100 1101111

Aplicația „știe” că aceste date sunt un șir Unicode codificat în UTF-8, așa că în primul pas transformă datele binare în numere folosind algoritmul UTF-8. Rezultatul va fi următorul:

104 101 108 108 111

Deoarece șirul rezultat este un șir Unicode, într-un al doilea pas aplicația va reprezenta fiecare număr individual ca un caracter folosind setul de caractere Unicode. Rezultatul este cuvântul „bună ziua”.

Concluzie

Acum, când cineva vă întreabă „Cum este diferit UTF-8 de Unicode?”, puteți răspunde cu încredere: UTF-8 și Unicode nu pot fi comparate. UTF-8 este o codificare care este folosită pentru a converti datele binare în numere. Unicode este un set de caractere care este folosit pentru a converti numerele în caractere.

Mi-am petrecut ultimele ore pe site-ul meu testând HTML 4.01 Strict și chiar am reușit cu el, dar mai există un avertisment de care se pare că nu pot scăpa. Avertizare:

Codificarea caracterelor nepotrivită!

Codificarea caracterelor specificată în antetul HTTP (iso-8859-1) este diferită de valoarea din element (utf-8). Voi folosi valoarea din antetul HTTP (iso-8859-1) pentru această confirmare.

Pentru informații generale despre cum să schimbați antetul setului de caractere în diferite stive de rețea, consultați http://www.w3.org/International/O-HTTP-charset


2018-05-25 13:30

Serverul marchează clar documentul ca ISO-8859-1 în antetele HTTP. Încercați să salvați default.html folosind codificarea UTF-8 folosind un editor adecvat.


2018-05-25 03:07

Bine, am venit cu o soluție parțială la problema mea. Deoarece a fost doar fișierul default.html care a cauzat avertismentul, am presupus că serverul îi făcea ceva special din cauza numelui său. Așa că am creat un nou fișier home.html cu același conținut ca fișierul default.html și am îndreptat fișierul .htaccess către noul fișier (vezi linia 3 de mai jos).

# Utilizați PHP5 ca aplicație implicită AddHandler/x-httpd-php5 .php DirectoryIndex home.html AddDefaultCharset UTF-8

Aceasta a rezolvat problema și toate fișierele sunt acum recunoscute ca UTF-8. Încă nu sunt sigur ce face serverul cu fișierul default.html sau unde sunt setările în acest sens, dar pe măsură ce problema mea dispare, voi uita de ea.

Motivul pentru a înțelege cum funcționează UTF-8 și ce este Unicode este faptul că VBScript nu are funcții încorporate pentru lucrul cu UTF-8. Și din moment ce nu am găsit nimic care să funcționeze, a trebuit să-l scriu/termin eu singur. După părerea mea, experiența este utilă în orice caz. Pentru o mai bună înțelegere, voi începe cu teoria.

Despre Unicode

Înainte de apariția Unicode, codificările pe 8 biți erau utilizate pe scară largă, ale căror principale dezavantaje sunt evidente:
  • Există doar 255 de caractere și chiar și atunci unele dintre ele nu sunt grafice;
  • Abilitatea de a deschide un document cu o codificare diferită de cea în care a fost creat;
  • Fonturile trebuie create pentru fiecare codificare.
Așa că s-a decis să se creeze un singur standard pentru o codificare „largă” care să includă toate caracterele (la început au vrut să includă doar caractere obișnuite, dar apoi s-au răzgândit și au început să adauge altele exotice). Unicode folosește 1.112.064 de puncte de cod (mai mult de 16 biți). Începutul dublează ASCII, iar apoi restul caracterelor latine, chirilice și alte caractere europene și asiatice. Pentru a desemna caractere, utilizați notația hexazecimală de forma „U+xxxx” pentru primii 65k și cu un număr mare de cifre pentru restul.

Despre UTF-8

Am crezut odată că există Unicode și există UTF-8. Mai târziu am aflat că am greșit.
UTF-8 este doar o reprezentare pe 8 biți a Unicode. Caracterele cu coduri mai mici de 128 sunt reprezentate ca un octet, iar din moment ce în Unicode repetă ASCII, textul scris doar cu aceste caractere va fi text ASCII. Caracterele cu coduri de la 128 sunt codificate în 2 octeți, cu coduri de la 2048 - 3, de la 65536 - 4. Deci ar fi posibil să obțineți până la 6 octeți, dar nu mai rămâne nimic de codificat cu ei.
0x00000000 - 0x0000007F: 0xxxxxxx 0x00000080 - 0x000007FF: 110xxxx 10xxxxxx 0x00000800 - 0x0000FFFF: 1110xxxx010000000: 1110xxxx010000000: 111000000 10xxxxxx 10xxxxxx 10xxxxxx

Codificăm în UTF-8

Procedura este aproximativ aceasta:
  • Convertim fiecare caracter în Unicode.
  • Verificăm din ce interval este simbolul.
  • Dacă codul simbolului este mai mic de 128, atunci îl adăugăm neschimbat la rezultat.
  • Dacă codul de caractere este mai mic de 2048, atunci luăm ultimii 6 biți și primii 5 biți ai codului de caractere. Adăugăm 0xC0 la primii 5 biți și obținem primul octet al secvenței și adăugăm 0x80 la ultimii 6 biți și obținem al doilea octet. Concatenați și adăugați la rezultat.
  • Putem continua într-un mod similar pentru codurile mari, dar dacă caracterul este dincolo de U+FFFF va trebui să ne ocupăm de surogate UTF-16.
Funcție EncodeUTF8(s) Dim i, c, utfc, b1, b2, b3 Pentru i=1 la Len(s) c = ToLong(AscW(Mid(s,i,1))) Dacă c< 128 Then utfc = chr(c) ElseIf c < 2048 Then b1 = c Mod &h40 b2 = (c - b1) / &h40 utfc = chr(&hC0 + b2) & chr(&h80 + b1) ElseIf c < 65536 And (c < 55296 Or c >57343) Atunci b1 = c Mod &h40 b2 = ((c - b1) / &h40) Mod &h40 b3 = (c - b1 - (&h40 * b2)) / &h1000 utfc = chr(&hE0 + b3) & chr(&h80 + b2 ) & chr(&h80 + b1) Altfel " Surogat minor sau major UTF-16 utfc = Chr(&hEF) & Chr(&hBF) & Chr(&hBD) End If EncodeUTF8 = EncodeUTF8 + utfc Next End Function Function ToLong(intVal) If intVal< 0 Then ToLong = CLng(intVal) + &H10000 Else ToLong = CLng(intVal) End If End Function

Decodificarea UTF-8

  • Căutăm primul caracter al formei 11xxxxxx
  • Numărăm toți octeții următori de forma 10xxxxxx
  • Dacă secvența este de doi octeți și primul octet este 110xxxxx, atunci tăiem prefixele și le adăugăm, înmulțind primul octet cu 0x40.
  • La fel pentru secvențe mai lungi.
  • Înlocuiți întreaga secvență cu caracterul Unicode dorit.
Funcție DecodeUTF8(s) Dim i, c, n, b1, b2, b3 i = 1 Do While i<= len(s) c = asc(mid(s,i,1)) If (c and &hC0) = &hC0 Then n = 1 Do While i + n <= len(s) If (asc(mid(s,i+n,1)) and &hC0) <>&h80 Apoi Ieșire Do Sfârșit Dacă n = n + 1 Buclă Dacă n = 2 și ((c și &hE0) = &hC0) Atunci b1 = asc(mid(s,i+1,1)) și &h3F b2 = c și &h1F c = b1 + b2 * &h40 Elseif n = 3 și ((c și &hF0) = &hE0) Atunci b1 = asc(mid(s,i+2,1)) și &h3F b2 = asc(mid(s,i+1, 1)) și &h3F b3 = c și &h0F c = b3 * &H1000 + b2 * &H40 + b1 Altfel " Caracter mai mare decât U+FFFF sau secvență incorectă c = &hFFFD Sfârșit dacă s = stânga(s,i-1) + chrw( c ) + mid(s,i+n) Elseif (c și &hC0) = &h80 apoi " Octet de continuare neașteptat s = stânga(s,i-1) + chrw(&hFFFD) + mid(s,i+1) End If i = i + 1 Loop DecodeUTF8 = s End Function