Autor Zpráva
Tomy
Profil
Ahoj, potřeboval bych poradit, co musím udělat, aby se někomu na nějakém prohlížeči nezobrazovalo místo é třeba é z otočeným háčkem atd. Poradí mi někdo prosím vás jak to mám udělat?
Trejpa
Profil
Tomy:
Nastavit značku kódování na takové, ve kterém je stránka uložená. Čeština na webu

Zkontrolovat, že použité písmo obsahuje i české znaky.
juriad
Profil
Těch problémů je tam více, nejlepší bude poslat odkaz na web, kde ti to nefunguje.
Tomy
Profil
No konkrétně mi to funguje, ale třeba kámošovi na mobilu to udělalo právě tohle...


Odkaz: www.sdhbecva.cz/index.html


Když přidám to UTF-8, tak mi to právě nahodí čtverečky z otazníky.
juriad
Profil
Chybí ti kódování češtiny. Používáš windows-1250. Je tedy potřeba přidat na začátek hlavičky (před všchny popisky):
<meta charset="windows-1250">

Zvaž však, zda by nebylo lepší používat utf-8 (to by vyžadovalo konverzi všech HTML souborů v nějakém editoru; nevíme, který používáš).
Přečti si také celou stránku Čeština / cestina
Tomy
Profil
Píšu to přes notepad ++
juriad
Profil
V Notepad++ by mělo v nabídce Encoding stačit vybrat Convert to UTF-8 without BOM. Ten BOM by ti tam teď nevadil, ale pokud začneš pracovat s PHP, tak tam dělá neplechu. Viz screenshot na superuser.com/questions/762473/ansi-to-utf-8-in-notepad

V každém připadě <meta charset="tvé-zvolené-kódování"> potřebuješ, ať už použiješ windows-1250 nebo utf-8.
Tomy
Profil
A mám tam teda dát UTF-8, nebo windows-1250?
Chamurappi
Profil
Reaguji na Tomyho:
Pokud zůstaneš u windows-1250 a doplníš <meta> značku z příspěvku [#5], problém máš vyřešený.


Reaguji na juriada:
Zvaž však, zda by nebylo lepší používat utf-8
To se zvažuje jak, pokud doposud o kódováních češtiny nic neslyšel?
Tomy
Profil
Má každé nějaké výhody nebo tak něco?
Trejpa
Profil
Tomy:
V kódování UTF-8 můžeš používat více znakových sad dohromady na jedné stránce (latinku, azbuku, japonštinu). Nevýhodou je trochu větší bitová velikost souboru při použití znaků mimo latinku, znaky nad tabulkou ASCII se totiž skládají ze dvou nebo více Bytů.
Tomy
Profil
No, stránky boudou jenom české, takže mi v tom případě stačí windows-1250.


Na druhou stranu by to asi nevadilo i to UTF-8. Jenomže, když to tam dám tak mi to právě u písmenek s diakritikou hází ty čtverečky s otazníkem. To se dá vyřešit tímkonvertováním v tom editoru? Ono to nějak upraví ten soubor, nebo co to udělá? není to jenom konkrétně pro ten editor a na serveru by to bylo zase bez toho UTF? Nevím jestli mi rozumíte co tím chci říct :D Tak blbě se ptám, protože nevím :D
Trejpa
Profil
Tomy:
Nestačí změnit meta značku. Je třeba i stránku uložit v tomtéž kódování, viz [#7] nastavení kódování v editoru.

Ono to nějak upraví ten soubor, nebo co to udělá?
Ano. Změna kódování použije jiné Bajty v souboru. Jaké se použijí, o tom je prohlížeč informován právě meta značkou.
Tomy
Profil
Nojo, ale proč mi to tam hází ty otazníky, a windows-1250 ne?


No už vím proč. když si změním to kódování tak mi to tam místo te diakritiky nahází nějaké znaky a já je musím zpátky přepsat :(
Trejpa
Profil
Tomy:
Protože to máš uloženo jako windows-1250, ne jako utf-8.

Uloženo v windows-1250 + <meta charset=windows-1250> = čeština
Uloženo v windows-1250 + <meta charset=utf-8> = ?e?tina
Uloženo v utf-8 + <meta charset=windows-1250> = ?e?tina
Uloženo v utf-8 + <meta charset=utf-8> = čeština

Konečně si přečti již dvakrát odkázanou stránku o češtině.
Tomy
Profil
Už sem to udělal. Ale stejně mi to tak dělá pořád. Dám tam windows-1250, s tím si vystačím.


Tomy:
Jinak děkuju moc, že jste to semnou přežili a poradili mi :D :)
juriad
Profil
Každý znak, který napíšeš je v souboru uložený jako číslo. Existují tabulky, které říkají, jaké číslo odpovídá jakému znaku. Ty tabulky si můžeš najít na internetu. Jednotlivá kódování se liší tím, jaké znaky umí zakódovat a jaké číslo kterému znaku přiřadí.
* window-1250, windows-1252, latin2, latin1, windows-1251... umí jen 256 znaků, které jejich tvůrce zvolil; většinou jsou tato kódování také pojmenovaná po zemi nebo regionu, jehož všechny znaky obsahují;
* utf-8 umí všechny znaky, které kdy budou existovat ať už jde o češtinu, ruštinu, čínštinu, matematické znaky, smajlíky; toto kódování je univerzální.
Všichni tvůrci (ehm, počítej řekněme 90. léta a novější) se však shodli na tom, co bude prvních 128 znaků a mezi nimi jsou: malá a velká písmena bez diakritiky, interpunkce, čísla, vše toto: !@#$%^&*() ... To je důvod, proč zlobí ta diakritika, protože ty jako středoevropan jiné znaky mimo rozsah těch prvních 128 často nepoužíváš.

Máš tedy uložený soubor na disku, který je plný čísel a kdokoli jej chce zobrazit jako text musí chápat, kterému znaku čísla odpovídají. Musí uhodnout to kódování. V případě webové stránky se to prohlížeči na počítači povedlo, ale prohlížeči na mobilu ne. Z toho důvodu musíš poradit, o jaké kódování se jedná pomocí toho meta tagu. Pak všechny prohlížeče pochopí a zobrazí stránku správně. V prohlížeči si můžeš vynutit zobrazit stránku, jakoby měla jiné kódování (pak uvidíš, že se ti většina diakritiky rozsype).

Dříve, když utf-8 vznikalo, tak byla jeho podpora v programech slabší. Dnes mu ale rozumí všechny programy. Většinu věcí, co na internetu najdeš je již v kódování utf-8.
utf-8 má výhody:
* Lze v něm zapsat každý znak. Nestane se ti jako o jiných kódování, že bys měl smůlu, pokud bys chtěl uprostřed stránky zamachrovat a pozdravit čtenáře arabsky (ano, vždy můžeš vložit obrázek s arabským textem, ale to není ideální).
* Všichni mu rozumí; asi nepřesvědčíš programátora v Německu nebo Rusku, aby jeho služba začala příjmat text v kódování windows-1250, když již podporuje utf-8, které může použít každý.
a také nevýhody:
* Každý znak kromě těch prvních 128 zabírá dvojnásobek nebo trojnásobek místa; spočítej si četnost diakritiky v české větě a dojde ti, že v průměru se jedná o každý x-tý znak. Takže nafouknutí velikosti je často zanedbatelné. V ostatních kódováních je to vždy 1 byte, což je důvod, proč umí reprezentovat jen 256 znaků.
* Blbě se předpokládá velikost, třeba když si vyhradíš 60 bytů, tak do nich někdy uživatel může zapsat 60 znaků a jindy jen 20. A nebo naopak, chceš umožnit zadat 60 znaků, musíš si tedy vyhradit prostor 180 bytů, protože uživatel může být vyčuraný a napíše jen ty dlouhé znaky.
* Některé funkce v programovacích jazycích predpokládají, že každý znak má jeden byte, což u utf-8 neplatí. Začátečník tyto funkce může omylem použít nevěda si důsledků.
Tomy
Profil
juriad:
Já bych to UTF-8 klidně použil, jenomže když to přepnu na UTF-8, tak mi to tu diakritiku nahází do nějakých znaků, a ty už prohlížeč nevezme, a proto to zobrazí míto písmena otazník. A protože už toho mám bohuželhodně, kvůli tomu že sem nikdy stránky neprogramoval a teď sem to začal, tak sem tam to kódování nedal.


A nebo sem to zase dělal špatně.
juriad
Profil
Tomy:
Jasně, pokud ti windows-1250 funguje, není třeba to měnit. Je však dobré vědět, že něco jako kódování existuje a že v něm může být problém.
Tomy
Profil
juriad:
Ještě taková blbá otázka. Nestačí to kódování mít jenom v index.html?
Trejpa
Profil
Tomy:
Nestačí to kódování mít jenom v index.html?
Ne. Každá stránka může mít rozdílné kódování.

jenomže když to přepnu na UTF-8, tak mi to tu diakritiku nahází do nějakých znaků
Většina editorů umí soubor otevřít v jednom kódování a uložit v jiném.
Tomy
Profil
Trejpa:
Už vím kde sem měl chybu, že mi to tam házelo ty znaky.
Bubák
Profil
juriad:
Nestane se ti jako o jiných kódování, že bys měl smůlu, pokud bys chtěl uprostřed stránky zamachrovat a pozdravit čtenáře arabsky (ano, vždy můžeš vložit obrázek s arabským textem, ale to není ideální).
Je možné použít číselné entity. Taky to není ideální, ale je to lepší řešení, než obrázek.
Tomy
Profil
Ještě bych se chtěl zeptat. Jak dám to utf-8 do php? Potřeboval bych to nacpat do formuláře na odesílání emailů, protože mi to dělá bordel.
Trejpa
Profil
Tomy:
Jak dám to utf-8 do php?
Výstupem PHP je pro uživatele HTML stránka. Takže stejně jako v HTML, PHP soubor musí být uložen v UTF-8 a mít meta značku <meta charset=utf-8>. Samotný formulář nemůže mít jiné kódování, než zbytek stránky.
Tomy
Profil
Trejpa:
A mám to dát do té části PHP nebo HTML?
Tomy
Profil
No, tak u toho php mi to už funguje, ale jedna věc co mi pořád nefunguje je diakritika u Předmětu v emailu. Nevíte co tam mám doplnit?

$subject = "$subject";

$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html; charset=UTF-8" . "\r\n";
$headers .= 'From: <sdhbecva@web.cz>' . "\r\n";

$name = $_POST["name"];
$message = $_POST["message"];
$subject = $_POST["subject"];
Fisir
Profil
Reaguji na Tomyho:
Máme to ve FAQ.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0