české znaky ve formuláři
- pavelP
- Člen | 7
Omlouvám se za zřejmě laický dotaz, používám z Nette pouze formuláře pomocí třídy Form (aktuálně verzi Form.php 118 2008–11–21). Když mám web v kodování UTF-8, vše je OK. V okamžiku když mám web v iso-8859–2 a chci získat zvalidovaná data z formuláře abych je uložil do DB v mém případě $insertValue = $form->getValues(); tak dostanu například takovouto hodnotu:
Kompletn zasovan stavebn pozemek, 1616 m2, Praha – Vchod, Popoviky
místo:
Kompletně zasíťovaný stavební pozemek, 1616 m2, Praha – Východ, Popovičky
která je ještě v $_POST správně, češtinu to ořeže zřejmě v procesu validace.
Může mně někdo poradit, kde je třeba nastavit že pracuji s iso-8859–2 kódováním, nebo mně alespoň potvrdit, že se jedná o vlastnost abych si to pro starší projekty udělal jinak? Předem díky
- romansklenar
- Člen | 655
Proveď update na současnou verzi a přesvědš se, že je použito toto:
$form->encoding = 'ISO-8859-2';
- David Grudl
- Nette Core | 8218
Pomocí $form->encoding
se nastaví kódování, v jakém se
má formulář vykreslit, nicméně metody setDefaults()
a
getValues()
pracují s UTF-8. Protože to, že je stránka
kódovaná v ISO-8859–2, nezabrání uživateli, aby do formuláře vložit
text třeba v azbuce. Proto uvnitř vše běží v UTF-8.
Nicméně HTTP protokol a vůbec všechny prohlížeče s výjimkou Opery mají s formuláři v jiném kódování než UTF-8 různé problémy, takže bych doporučoval weby v ničem jiném dnes už nekódovat.
- pavelP
- Člen | 7
Díky za tipy, nakonec jsem to vyřeřil tak, že před předáním dat to formuláře je převedu pomocí iconv na UTF, po validaci je následně převedu před uložením do DB zase zpět do iso-8859–2 (samozřejmě s rizikem ztráty znaků, které iso neumí). Je to takové upatlané, ale databáze je aktualizovaná zákazníkem pomocí SW někoho třetího, takže její kódování musí zůstat v iso-8859–2.
- johny
- Člen | 12
pavelP napsal(a):
databáze je aktualizovaná zákazníkem pomocí SW někoho třetího, takže její kódování musí zůstat v iso-8859–2.
Nepomohlo by specifikovat znakovou sadu klienta pro připojení do DB?
V případě MySQL k tomu slouží příkaz SET NAMES
či
SET CHARACTER SET
.
Více ve článku Jakuba Vrány a v dokumentaci
Případně k tomu slouží parametr charset
pokud
používáš Dibi.