Problém s validací délky textu v inputu – špatný výpočet délky

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

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.

enumag
Člen | 2118
+
0
-

Co vrátí \Nette\Utils\Strings::length($values->nazev)?

n.u.r.v.
Člen | 485
+
0
-

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

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

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

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

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…

matopeto
Člen | 395
+
0
-

mozno skus na zaciatku aplikacie nastavit:

mb_internal_encoding(„UTF-8“);