Problém s validací délky textu v inputu – špatný výpočet délky
- n.u.r.v.
- Člen | 485
Ahoj, tak tu mám zase problém s diakritikou:
ve formuláři mám jedno textové pole:
$form->addText('actionTitle', '')
->addRule(Form::MAX_LENGTH, 'Název muže obsahovat maximálně %d znaků.', $this->context->parameters['countTitleMax'])
->setRequired('Musíte vyplnit název!')
->setAttribute('placeholder', 'Název');
A když dám do pole tento text:
Další test – nezpracovávat – děkuji – Xxxxxx Xxxxx
Tak mi formulář vypíše chybu: Název muže obsahovat maximálně 50 znaků.
Přitom text má 50 znaků.
Když zruším pravidlo pro kontrolu délky textu, a vypíšu v metodě pro zpracování formuláře délku textu (strlen i mb_strlen), tak je to víc než 50. Když ale dám mb_strlen($values->nazev, ‚utf8‘), tak je to 50
Nevíte jak to vyřešit? díky.
- n.u.r.v.
- Člen | 485
enumag napsal(a):
Co vrátí
\Nette\Utils\Strings::length($values->nazev)
?
Dal jsem do metody určené pro zprac. formu vypis a vypsalo toto:
na mém localu vrátí 50 = ok
ale na hostingu dostanu chybu, protože \Nette\Utils\Strings::length používá
fci utf8_decode(), která je na hostingu nenainstalovaná – musím dát na
hosting požadavek, aby to povolili (na našem hostingu to totiž funguje tak,
že je php osekané a postupně se povolují jen potřebné věci…vím, je to
na píp, ale s tím já nic neudělám…)
Problém taky je, že výše uvedený výpis délky byl umístěn v metodě pro zpracování formu, jenže já se tam ani nedostanu – zachytí mi to pravidlo >addRule(Form::MAX_LENGTH…
- enumag
- Člen | 2118
To pravidlo Form::MAX_LENGTH
afaik v konečném důsledku
způsobí volání \Nette\Utils\Strings::length()
. Tzn. je divný
že to hodí tu chybu validace, mělo by to spadnout na krovky… Na localhostu
by to mělo projít, tedy pokud
$this->context->parameters['countTitleMax']
je 50.
Editoval enumag (22. 1. 2014 13:21)
- n.u.r.v.
- Člen | 485
enumag napsal(a):
To pravidlo
Form::MAX_LENGTH
afaik v konečném důsledku způsobí volání\Nette\Utils\Strings::length()
. Tzn. je divný že to hodí tu chybu validace, mělo by to spadnout na krovky… Na localhostu by to mělo projít, tedy pokud$this->context->parameters['countTitleMax']
je 50.
JJ, na hostingu dostanu chybu 500 při odeslání formuláře., na localu mi to vypíše textovou hlášku s chybou (text co je nastaven u addrule)
$this->context->parameters[‚countTitleMax‘] je 50
když dám vypsat echo strlen($values->nazev), nebo i mb_strlen($values->nazev), tak je to víc než 50.
Když dám ale echo mb_strlen($values->nazev,'utf8), tak je to 50.
Tedy řešením bude povolení utf8_decode (nebo v \Nette\Utils\Strings::length dát return mb_strlen($s,‚utf8‘);)
Editoval n.u.r.v. (22. 1. 2014 13:29)
- enumag
- Člen | 2118
Zkus tam nejdřív dát to return mb_strlen($s, 'utf8');
, pokud
to už bude fungovat tak si zažádej o povolení té funkce.
Stejně je mi ale divný že ti to na localhostu hodilo tu chybu validace.
Funkci mb_strlen
navíc bez toho ‚utf‘ nette pokud vím nikde
nepoužívá a utf8_decode ti na localhostu funguje, tzn. ta validace měla
projít.
- n.u.r.v.
- Člen | 485
enumag napsal(a):
Zkus tam nejdřív dát to
return mb_strlen($s, 'utf8');
, pokud to už bude fungovat tak si zažádej o povolení té funkce.Stejně je mi ale divný že ti to na localhostu hodilo tu chybu validace. Funkci
mb_strlen
navíc bez toho ‚utf‘ nette pokud vím nikde nepoužívá a utf8_decode ti na localhostu funguje, tzn. ta validace měla projít.
JJ, dal jsem return mb_strlen($s, ‚utf8‘); a je to ok…
ano, je to divné – na localu mě to hlasílo moc dlouhý text a na hostingu rovnou smrt…