Autor | Zpráva | ||
---|---|---|---|
Sirius Profil |
Zdravím,
mám problém s kódováním webu. Vše jsem vytvářel na lokálním serveru s kódováním Windows 1250 (Utf8 mi dělalo problémy). Vše fungovalo jak má, problém nastal ve chvíli nahrání na webový server. MySQL DB je ve verzi 4.0 (zde mám 5.1 a kódování cp1250_czech_cs) a tam, jak jsem zjistil, není možné nastavit kódování (předpokládám, že je tam ISO 8859-2, v žádné dokumentaci jsem to nenašel). Po nahrání do DB na novém serveru se rozsypali všechny české znaky. Ruční přepisování bych ještě vydržel, není toho zase tolik, ale i když nějaký znak v administraci upravím, tak se na stránce zobrazí špatně. Situace s diakritikou je asi následující. Kódování je kódování stránky v hlavičce. Kódování | Obyčejný | Text z DB | text | Vkládaný přes DB | Vkládaný přes příkaz v PHP ---------+---------------+-----------------------+---------------------- UTF-8 | nefunguje | nefunguje | nefunguje ---------+---------------+-----------------------+---------------------- Latin 2 | nefunguje | funguje | funguje ---------+---------------+-----------------------+---------------------- Win1250 | funguje | nefunguje | funguje ---------+---------------+-----------------------+---------------------- Co mám kde změnit, aby mi to fungovalo jak má? Jsem z toho už opravdu zoufalý. Moderátor Chamurappi: Titulek „Kódování“ nevystihuje podstatu dotazu. Příště zkus prosím vymyslet lepší.
|
||
Joker Profil |
#2 · Zasláno: 13. 10. 2009, 16:17:18
Funguje samozřejmě každé z nich, ale je potřeba, aby následující tři věci byly nastavené na stejné kódování:
- Kódování stránky (skutečné kódování v jakém je uložený soubor) - Co o sobě říká stránka (kódování v content-type) - Komunikační kódování s databází (kódování v SET NAMES) |
||
Sirius Profil |
#3 · Zasláno: 13. 10. 2009, 16:24:13 · Upravil/a: Sirius
Joker
Nějak z toho nechápu jak tedy může být rozdíl ve vypisování dat, která vkládám v DB ručně a která vkládá skript na stránce. Ale to je vedlejší. Co kde mám tedy nastavit a jaké kódování je nejlepší? Předpokládám, že asi UTF8, podle toho co jsem kde četl. Momentálně vím akorát, jak nastavit Content-Type, zbytek je pro mě cizí. Nějaký odkaz pro samostudium, nebo rada? (Vzhledem k časovým možnostem preferuji druhou možnost, ale budu rád za cokoliv. :) Edit: SET NAMES taky vím jak použít, jsem si vzpomněl. Kódování souboru je pro mě pořád záhada. |
||
Joker Profil |
#4 · Zasláno: 13. 10. 2009, 17:07:41 · Upravil/a: Joker
Sirius:
„jak tedy může být rozdíl ve vypisování dat, která vkládám v DB ručně a která vkládá skript na stránce.“ Formulář pro vkládání dat ručně má nejspíš jiné kódování než skript. edit: Resp. jeden z nich data posílá ve špatném kódování (v SET NAMES nastaví jiné kódování než v jakém data skutečně jsou) „Co kde mám tedy nastavit a jaké kódování je nejlepší?“ Nastavení: - Ukládání souboru: v editoru, ve kterém soubor upravujete - Co o sobě říká stránka: hlavička content-type (buď v php přes header(), nebo v HTML meta content-type) - Komunikační kódování s databází: SQL příkaz SET NAMES |
||
Sirius Profil |
#5 · Zasláno: 13. 10. 2009, 19:19:34
Všechny tři body splněny.
Ještě dotaz. Mám tedy zvolit UTF8? A jaký význam má v tom případě nastavení tabulek a samotné databáze na určité kódování? Na lokálním serveru jsem měl SET NAMES, soubor i stránku ve Windows 1250, a dokud nebyla i DB v cp1250, tak to nefungovalo, takže se trochu bojím nemožnosti nastavit kódování v té čtyrce. |
||
Joker Profil |
#6 · Zasláno: 13. 10. 2009, 19:29:55
Sirius:
Jestli to je nový web od začátku, volil bych UTF-8. Jestli jsou už dosavadní stránky ve windows-1250, dal bych windows-1250. Jinak paradoxně kódování samotných tabulek v databázi by nemělo být tak zásadní, protože právě to komunikační kódování slouží k tomu, aby databáze převedla kódování vstupů do kódování daného sloupce v tabulce a naopak. |
||
Sirius Profil |
#7 · Zasláno: 13. 10. 2009, 19:44:07 · Upravil/a: Sirius
Joker
Dobře, moc děkuju. Chamurappi Zkusím se polepšit. :) |
||
Sirius Profil |
#8 · Zasláno: 14. 10. 2009, 14:28:25 · Upravil/a: Sirius
Tak jsem nahrál znovu celý obsah na server (čekal jsem na úpravu DNS), včetně DB a data vytažená z databáze se vypisují s otazníkama místo diakritiky. Na localhostu vše funguje jak má.
Soubory jsou kódované v UTF-8. Content-Type je utf-8. SET NAMES 'utf8'. DB, včetně obsahu, je v utf8_general_ci. (Resp. v tomto kódování je na localhostu s MySQL 5.1, pak jsem ji exportoval v režimu kompatibility s 4.0 a nahrál na server.) Už fakt nevím co s tím, zkoušel jsem posílat i jiné dotazy místo SET NAMES, které jsem našel po různých diskusích, ale ani to nepomohlo. EDIT: Tak jsem kód poupravil na $setnames = mysql_query("SET NAMES 'utf8'"); if ($setnames) { echo "Zvoleno UTF-8"; } else { echo "Není zvoleno kódování."; } Na localhostu vypíše "Zvoleno UTF-8", na serveru "Není zvoleno kódování". Projel jsem manuál MySQL pro verzi 4.0 a žádný příkaz SET NAMES jsem nenašel, z čehož soudím, že je to výtvor až novějších verzí MySQL. Jak to mám vyřešit? |
||
Kajman_ Profil * |
#9 · Zasláno: 14. 10. 2009, 14:53:09
Znakové sady jsou v mysql od 4.1. Ve starších verzích to funguje tak, že jak tam data dáte, tak vypadnou.
Osobně bych doporučil přechod jiný server v rámci stejného hostingu nebo jiný hosting. V tak staré verzi tuším nefunguje více věcí, na kterými mužete smutnit. |
||
Sirius Profil |
#10 · Zasláno: 14. 10. 2009, 15:03:58
Kajman_
Web byl včera přesouván ze serveru s Windows na server s Linuxem, kvůli MySQL databázi. Jestli potřeba změnit hosting je zakončení 14-ti dní řešení různých problémů okolo hostingu, tak to majitel domény bude mít radost. Raději bych to vyřešil jinak, jestli je to možné. Jdu se s tím ještě potrápit. Díky |
||
Kajman_ Profil * |
#11 · Zasláno: 14. 10. 2009, 16:02:53
Když něco uložíte přímo na stránkách, tak to vypíše dobře? Rozbitá jsou jen data z prvotního exportu?
|
||
Sirius Profil |
#12 · Zasláno: 14. 10. 2009, 16:25:50 · Upravil/a: Sirius
Kajman_
V datech vkládaných přes web i těch z exportu nešla diakritika. Teď jsem zkusil DB před importem přehodit do Latin2, to samé u Content-Type a kódování souboru a ta jedna stránka fungovala. Zkusím i zbytek, snad to půjde. |
||
Časová prodleva: 4 dny
|
|||
Sirius Profil |
#13 · Zasláno: 18. 10. 2009, 21:53:39
Vyřešeno:
Data z MySQL 5.1 vyexportována jako Latin2, poté nahrána do verze 4.0. Soubory v kódování ISO 8859-2. Údaje v hlavičce také nastaveny na ISO 8859-2. Stále nevím, proč to nešlo s UTF-8, ani s Windows 1250, ale hlavně, že to teď funguje. :) Díky všem za rady PS: Nešlo mi editovat předchozí příspěvek. |
||
Časová prodleva: 15 let
|
0