Určenie kódovania textu v PHP - prehľad existujúcich riešení, plus ďalší bicykel. Určenie kódovania textu v PHP – prehľad existujúcich riešení plus ďalší bicykel PHP Konverzia kódovania reťazcov na utf 8

  • 20.06.2020

Čelil úlohe - automatická detekcia kódovania stránky / textu / čohokoľvek. Problém nie je nový a veľa bicyklov už bolo vynájdených. Článok obsahuje malý prehľad toho, čo sa našlo na nete - plus môj vlastný návrh, ako sa mi zdá, hodné riešenie.

1. Prečo nie mb_detect_encoding ()?

Skrátka to nejde.

Pozrime sa:
// Pri vchode - ruský text zakódovaný v CP1251 $ string = iconv ("UTF-8", "Windows-1251", "Prišiel k Anne Pavlovne, pobozkal jej ruku a nahradil ju svojou voňavou a žiarivou holou hlavou, a pokojne si sadol na pohovku."); // Pozrime sa, čo nám dáva md_detect_encoding (). Prvý $ strict = FALSE var_dump (mb_detect_encoding ($ reťazec, pole ("UTF-8"))); // UTF-8 var_dump (mb_detect_encoding ($ reťazec, pole ("UTF-8", "Windows-1251"))); // Windows-1251 var_dump (mb_detect_encoding ($ reťazec, pole ("UTF-8", "KOI8-R"))); // KOI8-R var_dump (mb_detect_encoding ($ reťazec, pole ("UTF-8", "Windows-1251", "KOI8-R"))); // FALSE var_dump (mb_detect_encoding ($ reťazec, pole ("UTF-8", "ISO-8859-5"))); // ISO-8859-5 var_dump (mb_detect_encoding ($ reťazec, pole ("UTF-8", "Windows-1251", "KOI8-R", "ISO-8859-5"))); // ISO-8859-5 // Teraz $ strict = TRUE var_dump (mb_detect_encoding ($ reťazec, pole ("UTF-8"), TRUE)); // FALSE var_dump (mb_detect_encoding ($ reťazec, pole ("UTF-8", "Windows-1251"), TRUE)); // FALSE var_dump (mb_detect_encoding ($ reťazec, pole ("UTF-8", "KOI8-R"), TRUE)); // FALSE var_dump (mb_detect_encoding ($ reťazec, pole ("UTF-8", "Windows-1251", "KOI8-R"), TRUE)); // FALSE var_dump (mb_detect_encoding ($ reťazec, pole ("UTF-8", "ISO-8859-5"), TRUE)); // ISO-8859-5 var_dump (mb_detect_encoding ($ reťazec, pole ("UTF-8", "Windows-1251", "KOI8-R", "ISO-8859-5"), TRUE)); // ISO-8859-5
Ako vidíte, výstup je úplný neporiadok. Čo robíme, keď nie je jasné, prečo sa funkcia správa týmto spôsobom? Presne tak, googlime. Našiel skvelú odpoveď.

Aby ste konečne rozptýlili všetky nádeje na používanie mb_detect_encoding (), musíte sa dostať do zdrojového kódu rozšírenia mbstring. Takže, vyhrnuté rukávy, poďme:
// ext / mbstring / mbstring.c: 2629 PHP_FUNCTION (mb_detect_encoding) (... // riadok 2703 ret = mbfl_identify_encoding_name (& string, elist, size, strict); ...
Ctrl + kliknutie:
// ext / mbstring / libmbfl / mbfl / mbfilter.c: 643 const char * mbfl_identify_encoding_name (mbfl_reťazec * reťazec, enum mbfl_no_encoding * elist, int elistsz, int strict) (const mbfl_encoding * encoding., fstrict * encoding.); .
Ctrl + kliknutie:
// ext / mbstring / libmbfl / mbfl / mbfilter.c: 557 / * * identifikácia kódovania * / const mbfl_encoding * mbfl_identify_encoding (mbfl_string * string, enum mbfl_no_encoding * elist, int elistsz, int strict) (...
Nebudem zverejňovať celé znenie metódy, aby som nezasypal článok zbytočnými zdrojmi. Kto má záujem, nech si to pozrie na vlastné oči. Trápi nás riadok na čísle 593, kde sa v skutočnosti kontroluje, či je znak vhodný na kódovanie:
// ext / mbstring / libmbfl / mbfl / mbfilter.c: 593 (* filter-> funkcia_filtra) (* p, filter); if (filter-> príznak) (zlé ++;)
Tu sú základné filtre pre jednobajtovú azbuku:

Windows-1251 (pôvodné komentáre zachované)
// ext / mbstring / libmbfl / filters / mbfilter_cp1251.c: 142 / * toto všetko je teraz také škaredé! * / statický int mbfl_filt_ident_cp1251 (int c, mbfl_identify_filter * filter) (ak (c> = 0x80 && c< 0xff) filter->príznak = 0; inak filter->

KOI8-R
// ext / mbstring / libmbfl / filtre / mbfilter_koi8r.c: 142 static int mbfl_filt_ident_koi8r (int c, mbfl_identify_filter * filter) (ak (c> = 0x80 && c< 0xff) filter->príznak = 0; else filter-> príznak = 1; / * to nie * / return c; )

ISO-8859-5 (tu je všetko zábavné)
// ext / mbstring / libmbfl / mbfl / mbfl_ident.c: 248 int mbfl_filt_ident_true (int c, mbfl_identify_filter * filter) (návrat c;)
Ako vidíte, ISO-8859-5 vždy vráti hodnotu TRUE (ak chcete vrátiť hodnotu FALSE, musíte nastaviť filter-> flag = 1).

Keď sme sa pozreli na filtre, všetko zapadlo na svoje miesto. CP1251 je na nerozoznanie od KOI8-R. Ak je ISO-8859-5 v zozname kódovaní, bude vždy rozpoznané ako správne.

Vo všeobecnosti zlyhať. Je to pochopiteľné - iba pomocou kódov znakov nie je možné zistiť kódovanie vo všeobecnom prípade, pretože tieto kódy sa prelínajú v rôznych kódovaniach.

2. Čo dáva Google

A Google rozdáva všetky druhy špiny. Zdroje sem ani nebudem zverejňovať, ak chcete, pozrite sa sami (odstráňte medzeru za http: //, neviem ako zobraziť text bez odkazu):

Http: // deer.org.ua/2009/10/06/1/
http: // php.su/forum/topic.php?forum=1&topic=1346

3. Vyhľadávanie podľa habr

1) opäť kódy znakov: habrahabr.ru/blogs/php/27378/#comment_710532

2) podľa môjho názoru veľmi zaujímavé riešenie: habrahabr.ru/blogs/php/27378/#comment_1399654
Proti a plusy v komentári na odkaze. Osobne si myslím, že toto riešenie je zbytočné len na detekciu kódovania – ukazuje sa príliš výkonné. Určenie kódovania v ňom je vedľajším účinkom).

4. Vlastne moje rozhodnutie

Nápad vznikol pri pohľade na druhý odkaz z predchádzajúcej časti. Myšlienka je nasledovná: vezmeme veľký ruský text, zmeriame frekvencie rôznych písmen a použijeme tieto frekvencie na zistenie kódovania. Pri pohľade do budúcnosti poviem hneď - s veľkými a malými písmenami budú problémy. Preto zverejňujem príklady frekvencií písmen (nazvime to „spektrum“), rozlišujúcich malé a veľké písmená aj bez malých písmen (v druhom prípade som k malému písmenu pridal ešte väčšie písmeno s rovnakou frekvenciou a všetky veľké som odstránil ). V týchto "spektrách" sú všetky písmená s frekvenciou menšou ako 0,001 a medzerou vyrezané. Tu je to, čo som dostal po úprave Vojna a mier:

"Spektrum" rozlišujúce veľké a malé písmená:
array ( "o" => 0.095249209893009, "e" =>, 06836817536026, "a" =>, 067481298384992, "u" =>, 055995027400041, "n" =>, 052242744063325, .... "e" =>, 002252892226507, "H "=>, 0021318391371162," P "=>, 0018574762967903," f "=> 0.0015961610948418," B "=> 0.0014044332975731," O "=>, 0013188987793209," A "=>, 0012623590130186," K "=>" 0,001180 =>, 001061932790165 ,)

Nerozlišujú sa malé a veľké písmená:
array ( "O" =>, 095249209893009, "o" =>, 095249209893009, "E" =>, 06836817536026, "e" =>, 06836817536026, "A" =>, 067481298384992, "a" =>, 067481298384992, "I" =>, 0559950274000 , "a" =>, 055995027400041, .... "C" =>, 0029893589260344, "c" =>, 0029893589260344, "u" =>, 0024649163501406, "u" =>, 0024649163501406, "e" =>, 002252892226507, "e" => 0,002252892226507, "F" => 0,0015961610948418, "f" => 0,0015961610948418,)

Spektrá v rôznych kódovaniach (klávesy polí sú kódy zodpovedajúcich znakov v zodpovedajúcom kódovaní):

Ďalej. Zoberieme text neznámeho kódovania, pre každé testované kódovanie zistíme frekvenciu aktuálneho znaku a pridáme ju do „hodnotenia“ tohto kódovania. Kódovanie s vyšším hodnotením je s najväčšou pravdepodobnosťou kódovanie textu.

$ encodings = pole ("cp1251" => vyžadovať "specter_cp1251.php", "koi8r" => vyžadovať "specter_koi8r.php", "iso88595" => vyžadovať "specter_iso88595.php"); $ enc_rates = pole (); pre ($ i = 0; $ i< len($str); ++$i) { foreach ($encodings as $encoding =>$ char_specter) ($ enc_rates [kódovanie $] + = $ char_specter)]; )) var_dump ($ enc_rates);
Ani sa nepokúšajte spustiť tento kód sami - nebude to fungovať. Môžete si to predstaviť ako pseudokód – detaily som vynechal, aby som článok nezaťažoval. $ char_specter sú presne tie polia, na ktoré odkazuje pastebin.

výsledky
Riadky tabuľky predstavujú kódovanie textu, stĺpce sú obsahom poľa $ enc_rates.

1) $ str = "Ruský text";
0,441 | 0,020 | 0,085 | Windows-1251
0,049 | 0,441 | 0,166 | KOI8-R
0,133 | 0,092 | 0,441 | ISO-8859-5

Všetko perfektne. Skutočné kódovanie má už 4x vyššie hodnotenie ako ostatné – to je na taký krátky text. Pri dlhších textoch bude pomer približne rovnaký.


cp1251 | koi8r | iso88595 |
0,013 | 0,705 | 0,331 | Windows-1251
0,649 | 0,013 | 0,201 | KOI8-R
0,007 | 0,392 | 0,013 | ISO-8859-5

Ojoj! Kompletná kaša. A pretože veľké písmená v CP1251 zvyčajne zodpovedajú malým písmenám v KOI8-R. A malé písmená sa zasa používajú oveľa častejšie ako veľké. Takže reťazec s uzávermi v CP1251 definujeme ako KOI8-R.
Pokúšame sa to urobiť bez ohľadu na veľkosť písmen

1) $ str = "Ruský text";
cp1251 | koi8r | iso88595 |
0,477 | 0,342 | 0,085 | Windows-1251
0,315 | 0,477 | 0,207 | KOI8-R
0,216 | 0,321 | 0,477 | ISO-8859-5

2) $ str = "LINE CAPPY RUSSIAN TEXT";
cp1251 | koi8r | iso88595 |
1,074 | 0,705 | 0,465 | Windows-1251
0,649 | 1,074 | 0,201 | KOI8-R
0,331 | 0,392 | 1,074 | ISO-8859-5

Ako vidíte, správne kódovanie dôsledne vedie ako pri „spektrách“ rozlišujúcich malé a veľké písmená (ak reťazec obsahuje malý počet veľkých písmen), ako aj pri tých, ktoré nerozlišujú malé a veľké písmená. V druhom prípade, pri tých, ktoré nerozlišujú veľké a malé písmená, nie je vodca samozrejme taký sebavedomý, ale celkom stabilný aj na malých líniách. Môžete sa tiež pohrať s váhami písmen - urobte ich nelineárne s ohľadom na frekvenciu, napríklad.

5. Záver

Téma sa netýka práce s UTF-8 - nie je tu žiadny zásadný rozdiel, okrem toho, že získavanie kódov znakov a rozdelenie reťazca na znaky bude o niečo dlhšie / komplikovanejšie.
Tieto myšlienky sa dajú samozrejme rozšíriť nielen na kódovanie v cyrilike - jedinou otázkou je "spektrá" zodpovedajúcich jazykov / kódovaní.

P.S. Ak to bude veľmi potrebné / zaujímavé - potom druhú časť plne funkčnej knižnice uverejním na GitHub. Aj keď sa domnievam, že údaje v príspevku sú dostatočné na rýchle napísanie takejto knižnice a prispôsobenie vašim vlastným potrebám - „spektrum“ pre ruský jazyk je rozložené, dá sa ľahko preniesť do všetkých potrebných kódovaní.

Jednoduchý skript zrazu prestal fungovať. Úlohou skriptu je získať HTML stránku (z prehliadačovej hry) a načítať dáta pomocou regulárnych výrazov. Ako začiatočníka vo mne táto udalosť vyvolala zmätok a miernu paniku: veď včera všetko fungovalo! Čo sa deje?
Musel som dôkladne pochopiť, ako fungujú niektoré funkcie PHP.

Kód bol dosť primitívny:

$ vzor =; $ url = "http://www.heroeswm.ru/pl_info.php?id=($id)"; $ html = file_get_contents ($ url); preg_match (vzor $, $ html, $ zhody); if (isset ($ sa zhoduje s [1])) echo $ sa zhoduje s [1]; inak echo "nenájdené";

$ vzor = "# Napíšte písmeno (. *) Bojová úroveň # je"; $ url = "http://www.heroeswm.ru/pl_info.php?id=($id)"; $ html = file_get_contents ($ url); preg_match (vzor $, $ html, $ zhody); if (isset ($ sa zhoduje)) echo $ sa zhoduje; inak echo "nenájdené";

Získavanie údajov a ich analýza pomocou jednoduchého regulárneho výrazu.
Musím povedať, že tento kód je výsledkom miernej úpravy. V pôvodnej verzii bolo bežné vyhľadávanie založené na HTML tagoch. Potreboval som však nájsť kúsok medzi dvoma frázami v ruštine. Do vyhľadávacej šablóny som pridal ruské slová a práve táto zmena sa stala kritickou.

A teraz po poriadku.
Stránka hry www.heroeswm.ru rozdáva stránky v kódovaní výhra-1251... Mám kódovanie na serveri UTF-8, takže všetky skripty sú in UTF-8 bez kusovníka.
Pôvodný skript s vyhľadávaním podľa HTML tagov fungoval korektne aj napriek rozdielom v kódovaní, no keď som do vyhľadávacej šablóny pridal znaky azbuky, prestal som hľadať a nachádzať. V mojej úlohe by bolo veľmi jednoduché zamietnuť problém a zvoliť inú šablónu - bez ruských slov, ale vo väčšine prípadov je to nemožné. Preto som sa rozhodol to dôkladne zistiť: aký je zásadný rozdiel medzi kódovaním prečo volá nesprávna práca regulárnych výrazov a zároveň - aké funkcie sú ovplyvnené kvôli rozdielu v kódovaní a ako to obísť.

Na získanie údajov som použil funkciu file_get_contents (), ktorá má nasledujúcu syntax:

reťazec file_get_contents ( reťazec$ filename), kde $ filename je názov súboru na čítanie.
Vráti reťazec alebo bool (false) v prípade neúspešného prijatia údajov.

Najviditeľnejší rozdiel medzi kódovaním výhra-1251 a UTF-8 Je počet znakov, ktoré je možné pomocou nich zakódovať. Na prvé (a všetky ostatné podobné) sa vzťahuje iba 255, pretože každý znak je zakódovaný v jednom byte.

Pomocou druhého môžete preniesť skutočne obrovskú sadu znakov vrátane písmen národných abecied, arabských písmen a hieroglyfov. Takéto rozšírenie znakovej sady je dosiahnuté vďaka tomu, že znaky nie sú kódované jedným, ale dvomi (pre väčšinu znakov) a viacerými (až štyrmi) bajtmi. Preto to kódovanie UTF-8(a podobne) sa nazývajú viac- alebo viacbajtové, na rozdiel od jednobajtových, ako napr výhra-1251.

Pri takom veľkom množstve znakov, UTF-8 nielenže umožní používanie písmen rôznych abecied na jednej stránke, ale poskytuje aj určitú záruku, že stránka v ruskom jazyku sa zobrazí správne, aj keď existuje kódovanie s podporou cyriliky ( výhra-1251, KOI8-R, CP866, ISO 8859-5 a iné) ani netušia: v Japonsku, Kórei, arabských krajinách atď. Odplatou za takúto všestrannosť bude o niečo vyššia váha znakov pri skladovaní a teda aj dlhší čas spracovania pre reťazcové funkcie. PHP... Mimochodom, vo väčšine prípadov nebudú fungovať správne. To je presne ten problém, na ktorý som narazil: bežný skript napísaný v ňom UTF-8, len som nemohol nájsť správny podreťazec, ktorý som potreboval, vrátane znakov azbuky, na stránke prijatej z lokality v Windows-1251.

Je logické predpokladať, že stránky, ktoré budú používať iba znaky cyriliky a latinky, budú UTF-8 na nič a uvažovaný jednoduchý syntaktický analyzátor „žil“ celkom dobre výhra-1251, ale sú situácie, keď sa z potreby spriateliť s týmito kódovaniami a použiť reťazcové funkcie PHP len sa nedostať von, napríklad pri vývoji projektu v UTF-8.

Čo spôsobilo nesprávne správanie funkcií reťazca?

Ako už bolo spomenuté, hlavným rozdielom medzi kódovaniami je dĺžka znakov. Problémy preto vznikajú pri používaní funkcií, v ktorých pracujú so znakmi ako s bajtmi a vracajú hodnoty aj v bajtoch (pre jednobajtové kódovanie platí: jeden znak sa rovná jednému bajtu).

Napríklad funkcia

substr ("Kontrola", 0, 5); // text v kódovaní UTF-8

substr ("Kontrola", 0, 5); // text v kódovaní UTF-8

vráti "Pr�" namiesto očakávaného "Dokázať": in UTF-8 Znaky cyriliky sú zakódované do dvoch bajtov, v dôsledku čoho vidíme „krakozyabr“ – iba prvý bajt znaku „o“.

Vo väčšine prípadov teda pracovať so strunami v UTF-8 budete musieť použiť špeciálne funkcie (napríklad z rozšírenia PHP mbstring) a niekedy použitie oboch (napríklad na prenos veľkosti reťazca v bajtoch do hlavičky HTTP budete musieť nechať strlen () a na sčítanie počtu znakov budete musieť pridať mb_strlen ( )).

Syntax bežne používaných funkcií, ktoré možno bude potrebné nahradiť funkciami z rozšírenia PHP mbString:

int strlen ( reťazec$ string) - vráti dĺžku reťazca alebo 0, ak je reťazec prázdny.

int strpos ( reťazec$ kopa sena, zmiešané$ ihla) - vráti polohu prvého výskytu $ ihly v podreťazci $ haystack, príp FALSE ak sa nenájde.

stripos je podobná predchádzajúcej funkcii, len pri vyhľadávaní sa nerozlišujú malé a veľké písmená.

reťazec substr ( reťazec$ reťazec, int$ začiatok [, int $ dĺžka]) - umožňuje vybrať podreťazec začínajúci od zadanej pozície znaku a pri zadávaní tretieho parametra určitej dĺžky.

Ich náprotivky sú navrhnuté tak, aby fungovali vo viacbajtových kódovaniach: mb_strlen, mb_strpos, mb_stripos a mb_substr.

Funkcií na prácu s textom je samozrejme oveľa viac. Uviedol som len tie najpopulárnejšie.

Funkcie na prácu s regulárnymi výrazmi stoja mimo, sú navrhnuté tak, aby našli podreťazec (podreťazce), ktorý zodpovedá maske zadanej regulárnym výrazom.

int preg_match ( reťazec$ vzor, reťazec$ predmet, pole& $ zhody)

int preg_match_all ( reťazec$ vzor, reťazec$ predmet pole& $ sa zhoduje).

V texte $ predmetu sa hľadá zhoda so vzorom regulárneho výrazu $. Výsledok vyhľadávania sa zapíše do premennej zhody $. Funkcia vráti počet nájdených zhôd so šablónou, v prípade chyby vráti FALSE.

Ak chcete použiť regulárne výrazy vo viacbajtových kódovaniach na porovnávanie vzorov, musíte k nim pridať modifikátor / u alebo použiť skupinu funkcií mb_ereg *.

Čo robiť?

Prvým riešením je prekódovanie UTF-8 prijaté v výhra-1251údaje - zdalo sa mi to nepohodlné. Koniec koncov, po prekódovaní budú musieť byť všetky obvyklé funkcie nahradené špeciálnymi funkciami na prácu UTF-8, alebo skúste použiť modifikátor / u (pri pohľade dopredu poviem, že vám umožňuje pracovať s reťazcami v jednobajtových kódovaniach, „ako s reťazcami UTF-8“, Ale neplatí pre linky v UTF-8). V mojom príklade existuje iba jeden preg_match (), ale v praxi je to zriedka.

Preto úlohu „obrátim“: chcem použiť obvyklé funkcie preg_match () a na tento účel prekódujem nie vstupný reťazec, ale vzor vyhľadávania pomocou iconv ().

Syntax funkcie:
reťazec iconv ($ in_charset, $ out_charset, $ str) – Konvertuje $ str z $ in_charset na $ out_charset. Vráti prekódovaný text bez ovplyvnenia pôvodnej premennej.

Funkcia vráti reťazec v novom kódovaní ale nemení kódovanie samotného reťazca. Preto

$ vzor = "# Napíšte písmeno (. *) Bojová úroveň # je"; iconv ("UTF-8", "WINDOWS-1251", $ vzor); // vzor $ zostane v pôvodnom preg_match (vzor $, $ html, $ sa zhoduje);

nebude fungovať - ​​vzor $ zostáva v pôvodnom kódovaní UTF-8... Musíte priradiť výsledok iconv k premennej:

$ vzor = "# Napíšte list (. *) Bojová úroveň # je"; $ vzor = iconv ("UTF-8", "WINDOWS-1251", $ vzor); preg_match (vzor $, $ html, $ zhody);

$ vzor = "# Napíšte písmeno (. *) Bojová úroveň # je"; $ vzor = iconv ("UTF-8", "WINDOWS-1251", $ vzor); preg_match (vzor $, $ html, $ zhody);

Teraz vyhľadávanie funguje správne, ale iba prehliadač odosiela pevné krakozyabry. No, tu už viem, čo mám robiť: musíte prekódovať výsledok do funkčného kódovania UTF-8... A potom sa objavil druhý bod, ktorý mi nebol zrejmý, hoci keby som mal viac skúseností, pravdepodobne by som nespôsobil žiadne ťažkosti: prečo iconv () prekóduje niektoré premenné a iné nie?

Premenná $ sa zhoduje je pole a pokúsil som sa dostať preč s jedným prekódovaním iconv ($ sa zhoduje). Ešte raz sa pozriem na popis syntaxe funkcií: no, samozrejme, všetky parametre musia byť reťazce, nie polia. To znamená, že je potrebné opakovať všetky hodnoty poľa, ktoré je potrebné znova zakódovať, a preložiť ich do požadovaného kódovania. V mojom príklade som pole neopakoval, pretože ma zaujímala jedna hodnota a nie celé pole. Špecifikoval som to aj ako parameter funkcie iconv ().

Tu je to, čo som dostal vo finálnej verzii:

// nastavenie predvoleného kódovania setlocale (LC_ALL, "ru_RU.UTF-8"); hlavička ( "Typ obsahu: text / html; znaková sada = UTF-8"); $ vzor = "# Napíšte list (. *) Bojová úroveň # je"; $ vzor = iconv ("UTF-8", "WINDOWS-1251", $ vzor); $ url = "http://www.heroeswm.ru/pl_info.php?id=993353"; $ html = file_get_contents ($ url); preg_match (vzor $, $ html, $ zhody); if (isset ($ sa zhoduje s [1])) echo $ sa zhoduje s [1] = iconv ("WINDOWS-1251", "UTF-8", $ sa zhoduje s [1]); inak echo "nenájdené"; ?>

Článok napísal môj dobrý kamarát. Venuje sa písaniu a recenzovaniu textov, programovanie v PHP je skôr jej hobby. V mojom blogu opravuje všetky publikácie a táto sa mi stala darčekom k druhému výročiu blogu.

Nenašli sa žiadne súvisiace publikácie.

Vráťme sa k našej HTML stránke, ktorú sme vytvorili v predchádzajúcich lekciách a teraz si nastavíme kódovanie, v ktorom bude jej text uložený.

Chcel by som vám povedať o dvoch spôsoboch, ako môžete zmeniť kódovanie textu. Spravidla ich používam v praxi a osvedčili sa.

Najspoľahlivejším spôsobom zmeny kódovania textu je program Notepad ++. Táto metóda spravidla vždy spoľahlivo funguje a s jej pomocou dokážete vyriešiť aj tie najťažšie problémy.

1 spôsob. Používanie programu Poznámkový blok ++

Aby sme teda zmenili kódovanie textu, potrebujeme špeciálny textový editor s názvom notepad ++.

Je zadarmo a môžete si ho stiahnuť z tejto stránky:

Pomocou tohto programu otvorte stránku HTML a prejdite do hlavnej ponuky "Kódovanie".

Vyberte kódovanie, na ktoré chcete konvertovať, a uložte súbor.

To je celý postup. Program je veľmi dobrý a na rozdiel od iných alternatív bezchybne mení kódovanie.

Metóda 2. Používanie univerzálneho editora kódu Dreamweaver.

Ak pracujete v editore kódu na všeobecné použitie Dreamweaveru, existuje aj možnosť určiť kódovanie, v ktorom sa text zobrazí.


Dá sa to urobiť aj pomocou hlavného menu "Zmeniť - Vlastnosti stránky".


Ďalej v kategórii "Názov / Kódovanie" vyberte kódovanie, ktoré potrebujete. Najčastejšie to bude kódovanie Unicode (UTF-8).

Pri vytváraní nového html dokumentu táto metóda funguje dobre, ale ak zmeníte kódovanie existujúceho súboru, je lepšie použiť prvú metódu. V tomto prípade to funguje lepšie.

Vykonajte túto operáciu na počítači.

Zadanie kódovania textu pre html stránku však ešte nestačí. Pre jeho normálnu prevádzku musíte urobiť ešte jednu akciu: povedzte prehliadaču, v akom kódovaní je text napísaný.