Probleme cu codificarea html. Rezolvarea problemelor legate de codificarea incorectă a paginilor web
Când creează un site web, webmasterii începători au adesea întrebări: ce codificare să folosească pentru site-ul web, cum diferă UTF-8 de Windows-1251 și cum să îl introducă în setul de caractere META al paginilor HTML ale site-ului. Răspunsurile la toate aceste întrebări sunt în acest articol.
Ce este codificarea site-ului și cum funcționează?
Codificarea poate fi prezentată sub forma unui tabel format din diferite litere, numere și alte simboluri pe înțelesul oamenilor, care sunt codificate într-un anumit mod. Când deschideți un fișier text, care include pagini HTML, computerul citește din antetul fișierului în ce codificare a fost salvat și afișează textul în codificarea corespunzătoare, transformând datele computerului într-o formă care poate fi înțeleasă de oameni, comparând aceste date cu tabel de codificare. Dacă informațiile de codificare din antetul fișierului se potrivesc cu codificarea în care sunt stocate datele în pagina HTML, atunci utilizatorul vede literele, numerele și alte simboluri familiare cu el. Dacă există o discrepanță, rezultatul este că utilizatorului i se prezintă un set de caractere de neînțeles, acest lucru se întâmplă mai ales în programele de e-mail mai vechi. Dacă un utilizator primește o scrisoare cu farfurie de neînțeles, atunci pur și simplu parcurgând diferite codificări, este de obicei posibil să ghicească și să o selecteze pe cea în care este scrisă scrisoarea și, ca urmare, un set de caractere de neînțeles se transformă într-un mod de înțeles uman. text.
Același lucru se întâmplă și cu paginile HTML ale site-ului. Dacă documentul a fost salvat, de exemplu, în codificare UTF-8, iar documentul în sine conține o etichetă META care indică faptul că aceasta este codificare Windows-1251, atunci browserul va compara din nou datele salvate în fișier cu tabelul de codificare. specificate acestuia și deoarece caracterele sunt codificate în funcție de -diferent, browserul va afișa un set de caractere de neînțeles în locul textului obișnuit, sau unele dintre litere pot fi în formă normală, în timp ce alte litere sau simboluri pot fi afișate, pt. de exemplu, sub formă de semne de întrebare. Toate cele de mai sus se aplică și pentru afișarea numelor de fișiere.
Când creați un document nou într-un editor de text, este mai bine să vă asigurați imediat că este selectată codificarea dorită. Editorii moderni vă permit să convertiți textul unui document deschis de la o codificare la alta, iar Notepad-ul standard vă permite să selectați codificarea numai atunci când salvați fișierul.
Cele mai comune codificări
Din paragraful anterior, știți deja ce este codificarea și de ce este atât de important să o scrieți corect în codul paginilor site-ului. Să aflăm acum care dintre multele codificări este cel mai bine de ales pentru viitorul site. Deoarece cel mai comun și mai ușor de învățat sistem de operare a fost întotdeauna sistemul de operare Windows, majoritatea dezvoltatorilor web au creat pagini HTML în codificarea Windows-1251 (ANSI), care a fost folosită implicit. Dar Windows-1251 nu acceptă un număr foarte mare de litere și simboluri, iar dezvoltatorii doresc să folosească diverse săgeți, inimi, pătrate și alte simboluri în textele lor, inclusiv necesitatea de a combina cuvinte din diferite limbi într-un singur document, deci a fost înlocuit de mult cu cât a sosit UTF-8 mai extins și majoritatea dezvoltatorilor folosesc această codificare.
Probleme de codificare nu numai în pagina HTML
Site-ul, fie că este doar o colecție de documente HTML statice sau script-uri dinamice complexe care generează pagini din mers, este găzduit pe un server web, care funcționează și cu o codificare specifică. Și dacă serverul oferă informații într-o singură codificare, iar paginile sau scripturile dvs. sunt salvate într-o codificare diferită, atunci din nou pot apărea probleme cu afișarea paginilor în browserul utilizatorului. Multe găzduiri vă permit să schimbați setările și să selectați codificarea în conformitate cu cea folosită în fișierele site-ului prin intermediul panoului de control, sau o puteți scrie în fișierul .htaccess dacă găzduirea folosește popularul server web Apache.
Aproape niciun site web modern nu poate funcționa fără utilizarea unei baze de date MySQL și poate deveni, de asemenea, o sursă de probleme de codificare. Dacă fișierele site-ului sunt salvate într-o codificare, iar informațiile din baza de date sunt în alta, atunci pe pagină acea parte a informațiilor care este scoasă din baza de date poate fi afișată sub forma acelorași semne de întrebare sau alte simboluri de neînțeles . Pentru a evita problemele de codare, la fel ar trebui să fie și pentru serverul web, baza de date MySQL, în scripturi, în paginile HTML ale site-ului și în eticheta META, care este scrisă în codul HTML. Dacă există probleme cu afișarea textului, verificați toate cele de mai sus pentru problema.
Setul de caractere META al documentului HTML
Pentru a spune browserului și motoarelor de căutare în ce codificare sunt salvate paginile site-ului, în codul lor este scris un set de caractere META.
Pentru codificarea Windows-1251:
Textul paginii
Pentru codificarea UTF-8:
Textul paginii
Acum știți ce este codificarea site-ului și unde să căutați probleme dacă textul este afișat incorect în orice parte a site-ului.
Copierea articolului este interzisă.
3 voturiBună ziua, dragi cititori ai blogului meu. Astăzi vă vom vorbi despre codificare. Dacă citiți articolul meu despre asta, știți că orice document de pe Internet nu este stocat în forma în care suntem obișnuiți să-l vedem. Este scris folosind simboluri și semne de neînțeles pentru oameni. Este exact la fel cu textul.
Există mai multe codificări și, prin urmare, uneori vedeți caractere ciudate atunci când deschideți o carte într-o aplicație mobilă sau încărcați un articol pe un site web, iar prin modificarea unor valori în setări, veți vedea alfabetul care este familiar ochi.
Codificare Windows-1251 - ce este, ce semnificație are la crearea unui site web, ce caractere vor fi disponibile și este cea mai bună soluție astăzi? Despre toate acestea în articolul de astăzi. Ca întotdeauna, într-un limbaj simplu, cât mai clar și cu un număr minim de termeni.
Puțină teorie
Orice document de pe un computer sau de pe Internet, așa cum am spus, este stocat sub formă de cod binar. De exemplu, dacă utilizați codificarea ASCII, atunci litera „K” va fi scrisă ca 10001010, iar în Windows 1251 simbolul – Љ este ascuns sub acest număr. Drept urmare, dacă un browser sau un program accesează un alt tabel și citește coduri Windows 1251 în loc de ASCII, cititorul va vedea un simbol care este complet de neînțeles pentru el.
Întrebarea logică este, de ce să vă obosiți să veniți cu atâtea tabele cu coduri? Faptul este că, pe lângă alfabetul rus, există și engleză, germană și chineză. După unele estimări, există aproximativ 200.000 de caractere. Deși, nu prea am încredere în aceste statistici, amintindu-mi japoneză.
Nu uitați că pentru literele majuscule și mici trebuie să veniți cu propriul cod, există virgule, liniuțe și așa mai departe.
Cu cât sunt mai multe simboluri în tabel, cu atât este mai lung codul pentru fiecare dintre ele, ceea ce înseamnă că greutatea documentului devine mai mare.
Imaginează-ți dacă o carte cântărește 4 GB! Ar dura foarte mult timp pentru a încărca și a ocupa tot spațiul liber de pe computer. Decizia de a descărca nu ar părea ușoară.
Dacă te gândești la site-uri web, este în general înfricoșător să te gândești la ce s-ar fi întâmplat. Fiecare pagină a durat mai mult de o oră pentru a se deschide chiar și pe fibră optică de mare viteză! Cred că telefoanele mobile ar putea fi aruncate în siguranță. Le poți folosi în aer liber chiar și cu 4G? Mă îndoiesc.
Din aceste motive, fiecare programator a încercat la un moment dat să vină cu propriul său tabel de simboluri. Pentru a facilita utilizarea și pentru a menține greutatea optimă.
Microsoft, de exemplu, a creat Windows-1251 pentru segmentul în limba rusă. Desigur, are avantajele și dezavantajele sale. La fel ca orice alt produs.
În zilele noastre, doar 2% din toate paginile de pe Internet sunt scrise în 1251. Majoritatea webmasterilor folosesc UTF-8. De ce este asta?
Dezavantaje și avantaje
UTF-8, spre deosebire de Windows-1251, este o codificare universală care conține litere de diferite alfabete. Există chiar și UTF-128, care conține toate limbile - Teulu, Swahili, Laoțiană, Malteză și așa mai departe.
UTF-8 este mai sărac, literele ocupă mult mai puțin spațiu și ocupă doar un octet de memorie, ca în 1251. UTF conține caractere rare din alte limbi sau caractere speciale. Acestea cântăresc 5-6 octeți fiecare, dar sunt utilizate extrem de rar în document.
Această codificare este mai atentă și, prin urmare, majoritatea aplicațiilor o folosesc implicit. Adică, dacă nu spuneți programului ce codificare utilizați, atunci primul lucru pe care îl va verifica este UTF-8.
Când creați un document HTML pentru un site web, le spuneți browserelor ce tabel să se uite atunci când decodificați înregistrările.
Pentru a face acest lucru, trebuie să introduceți următoarele date în eticheta head. După simbolurile „charset=" vine fie UTF, fie Windows, ca în exemplul de mai jos.
<meta http-equiv = conținut „Tip de conținut” = „text/html; charset=windows-1251”> |
Dacă pe viitor doriți să schimbați ceva și să introduceți o frază în albaneză folosind acest tabel de decodare, atunci nimic nu va funcționa, deoarece codificarea nu acceptă această limbă. UTF-8 vă va permite să faceți acest lucru fără probleme.
Dacă sunteți interesat de crearea corectă a unui site web, atunci vă pot recomanda cursul lui Mikhail Rusakov „ Crearea și promovarea site-ului web de la A la Z ».
Conține multe - 256 de lecții care acoperă JavaScript și XML. Pe lângă limbajele de programare, vei putea înțelege cum să monetizezi un site, adică să faci mai mult profit mai rapid și mai mult. Unul dintre puținele cursuri care explică tot ce ai nevoie atât de detaliat.
Învăț de un an acum. la școala de bloggeri Alexander Borisov . Este nevoie de multe ori mai mult timp, finalul nu este încă în vedere, dar nu este mai puțin exhaustiv și discipline. Motivează să continue dezvoltarea.
Ei bine, dacă apar întrebări, nu este nevoie să căutați pe Internet. Există întotdeauna un mentor competent.
Cumva am iesit in afara subiectului. Să revenim la codificări.
Baze de date pentru baie
Când vine vorba de PHP, totul este în general înfricoșător. Am vorbit deja despre bazele de date, acestea sunt folosite pentru a accelera site-ul. De obicei, nu apelați la ei, dar atunci când apare nevoia de a transfera un site, deveniți neliniştit.
Dificultățile se întâmplă tuturor, indiferent de experiența dvs. de muncă, de vechime sau de vechime. Unele pagini din baza de date pot conține toate caracterele disponibile pentru Windows 1251, altele, de exemplu, în șabloane de pagină, într-o codificare diferită.
Până când este nevoie de transfer, totul funcționează și funcționează, deși nu în totalitate corect. Dar după mutare, încep necazurile. În mod ideal, ar trebui să utilizați fie numai UTF, fie Windows 1251, dar, de fapt, astfel de deficiențe se întâmplă întotdeauna tuturor.
Pentru ca decriptarea să fie consecventă, trebuie să introduceți codul mysql_query ("SET NAMES cp1251"). În acest caz, conversia va fi efectuată folosind un alt protocol - cp1251.
htaccess
Dacă decideți insistent să utilizați 1251 pe site-ul dvs., atunci ar trebui să găsiți sau să creați un fișier htaccess. El este responsabil pentru setările de configurare. Va trebui să adaugi încă trei rânduri pentru ca totul să vină împreună.
DefaultLanguage ru; AddDefaultCharset windows-1251; php_value default_charset „cp1251” |
DefaultLanguage ru; AddDefaultCharset windows-1251; php_value default_charset „cp1251”
Vă recomand în continuare să luați în considerare utilizarea UTF-8. Este mai popular, mai simplu și mai bogat. Indiferent de deciziile pe care le iei acum, este important să poți corecta totul mai târziu. Adăugarea unei versiuni în limba engleză a site-ului folosind această codificare va fi mult mai ușoară. Nimic nu trebuie reparat.
Decizia este la tine. Aboneaza-te la newsletter pentru a afla cat mai repede unde sa inveti pentru a nu repeta greselile altora, precum si care bloggeri primesc mai multi vizitatori.
Ne revedem și mult succes în demersurile tale.
Dacă codificarea este incorectă, întregul site sau o parte a acestuia este afișat ca „kryapozyablov”, adică. caractere ciudate care fac textul imposibil de citit. Această situație poate apărea dacă codarea serverului web este configurată incorect sau dacă nu există setări. Să luăm în considerare posibilele opțiuni și modalități de rezolvare a problemelor
Codificare incorectă a paginii HTML
Să creăm un fișier de test:
Sudo gedit /var/www/html/encoding.html
Să copiem în el:
Să deschidem acest fișier în browser
După cum puteți vedea, codificarea este detectată incorect de browser:
Există mai multe modalități de a corecta această situație. Să începem cu cel mai simplu lucru - specificați în mod explicit codificarea paginii web. Acest lucru se face printr-o metaetichetă, care trebuie să fie localizată în interiorul etichetei cap:
Să adăugăm această linie la fișierul nostru de testare, astfel încât să arate astfel:
Fișier de testare pentru a verifica codificarea
După cum putem vedea în următoarea captură de ecran, problema este rezolvată:
Dacă codarea fișierului dvs. este diferită de UTF-8, apoi înlocuiți-l cu Windows-1251 sau unul care se potrivește cu codificarea paginii web. Pentru a afla cum să detectați codificarea fișierelor, aruncați o privire.
Acesta a fost cel mai simplu mod de a remedia problema de codificare - fără a modifica setările serverului.
Să readucem fișierul nostru de testare la starea inițială și să continuăm să studiem modalități de a specifica codificarea.
Dacă fișierele .htaccess activate de setările Apache, aceste fișiere pot fi folosite pentru a specifica codificarea paginilor trimise de serverul web. Pentru a activa suportul pentru fișiere .htaccessîn fișierul de configurare Apache ( /etc/apache2/apache2.conf) găsiți un grup de linii
Și înlocuiește-l
AllowOverride Nici unul
AllowOverride All
După aceasta, serverul trebuie repornit.
Sudo systemctl reporniți apache2.service
Fişier .htaccess trebuie plasat în același director cu site-ul. Site-ul meu este găzduit în directorul rădăcină al serverului web. Dacă aveți același lucru, atunci acum în folder /var/www/html/ creați un fișier .htaccessși adăugați directiva la acesta AddDefaultCharset după care indicați codificarea dorită. Exemple
AddDefaultCharset UTF-8
AddDefaultCharset windows-1251
Puteți specifica o codificare care va fi aplicată numai fișierelor cu un anumit format:
AddCharset utf-8 .atom .css .js .json .rss .vtt .xml
Setul de fișiere poate fi orice, de exemplu:
AddCharset utf-8 .html .css .php .txt .js
Următoarea opțiune este o alternativă și vă permite, de asemenea, să setați codificarea pentru fișiere de un anumit tip, necesită activarea acesteia mod_headers:
O altă opțiune care poate fi folosită și în fișier .htaccess pentru a seta codarea UTF-8:
IndexOptions +Charset=UTF-8
Dacă site-ul este în PHP, atunci poate fi necesar să duplicați codificarea cu php_value default_charset:
AddDefaultCharset windows-1251 php_value default_charset "cp1251"
În loc să creați un fișier .htaccess, puteți seta codarea în fișierul de configurare a serverului web. Pentru Apache CentOS/Fedora acesta este fișierul httpd.conf, iar pe Debian/Ubuntu acesta este fișierul apache2.conf. Adăugați următoarea linie pentru a seta codificarea și reporniți serverul web pentru ca modificările să aibă efect:
AddDefaultCharset UTF-8
Cum să setați codificarea UTF-8 în PHP
În scriptul PHP, codificarea este setată la antet, De exemplu:
Antet ("Content-Type: charset=utf-8");
De obicei, alături de codificare, este indicat și tipul de conținut (în exemplu, opțiunea pentru o pagină HTML):
Antet ("Content-Type: text/html; charset=utf-8");
O altă opțiune pentru fluxul RSS:
Antet ("Content-type: text/xml; charset=utf-8");
Amintiți-vă că funcția antet trebuie apelat înainte de orice ieșire către browser. În caz contrar (dacă ieșirea în browser a fost deja făcută), atunci anteturile au fost deja trimise. Evident, în acest caz nu se mai poate schimba. Dacă un mesaj de eroare a fost trimis în browser, atunci anteturile au fost deja trimise, iar utilizarea antetului va cauza o eroare. Pentru a verifica dacă anteturile au fost deja trimise, utilizați headers_sent.
Metoda descrisă funcționează numai atunci când scriptul PHP generează complet conținutul paginii. Ar trebui să salvați paginile statice (cum ar fi html) în codificare utf-8. Majoritatea serverelor web vor lua notă de codificarea fișierului și vor adăuga un antet în consecință. De fapt, salvarea unui fișier PHP în codificare utf-8 va duce la același rezultat.
Codificarea incorectă a rezultatelor din baza de date MySQL
Dacă site-ul dvs. este format dintr-o parte statică (șablon) și o parte dinamică, care este formată din datele primite din baza de date, atunci poate apărea o situație când o parte a site-ului are codificarea corectă, iar o altă parte a site-ului are codificarea greșită. unu. În acest caz, este inutil să schimbați setările serverului web - din moment ce, totuși, o parte a paginii va avea codificarea greșită.
Trebuie să începeți prin a determina codificarea tabelelor. Te poți uita la phpMyAdmin:
Atenție la coloana " Comparaţie", intrare" utf8_unicode_ci„ înseamnă că este folosită codificarea UTF-8.
Vă puteți conecta la SGBD MySQL și puteți verifica codificarea tabelelor fără phpMyAdmin. Pentru aceasta:
Mysql -u root -p
Dacă ați uitat numele bazei de date, rulați comanda:
AFIȘAȚI BAZELE DE DATE;
Să presupunem că vreau să caut codificarea tabelelor din baza de date information_schema
USE information_schema;
Dacă ați uitat numele tabelelor, rulați:
AFIȘAȚI COLONELE COMPLETE DE LA table_name;
De exemplu:
AFIȘAȚI COLONANELE COMPLETE DIN GLOBAL_STATUS;
Veți vedea așa ceva:
Vezi coloana Colaţionare. In cazul meu acolo utf8_general_ci, e ca și cum utf8_unicode_ci, codificare UTF-8. Apropo, dacă nu știți care este diferența dintre codificări utf8_general_ci, utf8_unicode_ci, utf8mb4_general_ci, utf8mb4_unicode_ci, și, de asemenea, ce codificare să alegeți pentru baza de date MySQL, apoi uitați-vă.
Acum că știm codificarea (în cazul meu este UTF-8), de fiecare dată când vă conectați la DBMS MySQL trebuie să executați interogări secvenţial:
SET NUME UTF8 SET CARACTER SET UTF8 SET character_set_client = UTF8 SET character_set_connection = UTF8 SET character_set_results = UTF8
În PHP se poate face ceva de genul:
$this->mysqli = new mysqli($server, $nume utilizator, $parolă, $nume bază); if ($this->mysqli->connect_error) ( $this->errorHandler_c->logError(1, "Eroare de conectare (" . $this->mysqli->connect_errno . ") " . $this->mysqli->connect_error , $_SERVER ["REQUEST_URI"] ) $this->mysqli->query("SET NAMES UTF8"); $this->mysqli->query("SETARE SET DE CARACTERE UTF8"); $this->mysqli->query("SET character_set_client = UTF8"); $this->mysqli->query("SET character_set_connection = UTF8"); $this->mysqli->query("SET character_set_results = UTF8");
Rețineți că UTF8 trebuie să-l înlocuiți cu codificarea care este folosită pentru tabelele dvs.
Modificarea codificării fișierului
Dacă decideți să mergeți în altă direcție și în loc să instalați o nouă codificare, schimbați codificarea fișierelor, apoi uitați-vă la articolul „”. Vă spune cum să aflați codificarea curentă a fișierelor și cum să convertiți fișierele la orice codificare (nu doar UTF-8).
Cum să aflați ce codificare trimite serverul
Dacă doriți să aflați ce setări de codare are serverul web (ce codificare trimite în anteturi), atunci utilizați următoarea comandă:
Curl URL -s -o /dev/null -D /dev/stdout | grep -E "carset"
În ea în schimb URL introduceți adresa reală a site-ului pe care îl verificați. Dacă site-ul folosește HTTPS, atunci specificați adresa site-ului împreună cu protocolul, de exemplu
Curl https://softocracy.ru -s -o /dev/null -D /dev/stdout | grep -E "carset"
Ce codificare să alegeți pentru un site web
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 descrieri ale site-urilor, cuvinte cheie și alte date.
Meta-etichete pentru motoarele de căutare
Există o opinie printre dezvoltatorii de site-uri web potrivit căreia metaetichetele scrise corect vă permit să ajungeți în topul motoarelor de căutare. De fapt, acest lucru nu este adevărat; numai metaetichetele nu vă vor ajuta să creșteți sus, dar conținutul de metaetichetă prost executat poate înrăutăți clasarea site-ului.
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 unei pagini 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. Dacă această etichetă nu este pe pagină, atunci motorul de căutare va enumera pur și simplu primele cuvinte găsite pe pagină, care, de regulă, nu sunt foarte relevante pentru subiect.
Exemplul 1: Utilizarea descrierii
Cuvinte cheie
Această metaetichetă a fost menită să descrie cuvintele cheie care apar pe pagină (Exemplul 2). Însă, ca urmare, acțiunile oamenilor care doresc să ajungă în topul motoarelor de căutare prin orice mijloace necesare au fost acum discreditate. Prin urmare, multe motoare de căutare omit acest parametru.
Exemplul 2: Utilizarea cuvintelor cheie
Cuvintele cheie pot fi listate separate prin spații sau virgule. Motoarele de căutare în sine vor converti intrarea în formularul pe care îl folosesc.
Încărcare automată a paginilor
Pentru a descărca automat un document nou după o anumită perioadă de timp, utilizați instrucțiunea http-equiv="refresh" (exemplul 3).