české znaky ve formuláři

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
pavelP
Člen | 7
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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.