Nette\Utils\Validators::isUrl() ma problem s dlhou IDN domenou

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

sorry, zla kategoria. Prosim presunut do hlasenie chyb

Nette\Utils\Validators::isUrl() v aktualnej verzii 2.0.5 pre PHP 5.3 vrati pre url http://президент.рф/ true avsak pre dlhu url http://грузоперевозки-спецтехника-екатеринбург-окрестности.рф/ vrati false

Problem je ze v domene su multibyte znaky a neprejde validaciou na dlzku retazca – max 63 znakov.

Pre mna funguje, ked zmenim:

$alpha = "a-z\x80-\xFF";

pridat znaky azbuky (pravdepodobne treba pridat aj velke znaky) a zmenit uvodzovky na jednoduche.

$alpha = 'a-zа-я\x80-\xFF';

a v

return (bool) preg_match("(^https?://(?:(?:$domain\\.)*$topDomain|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(:\d{1,5})?(/\S*)?\\z)i", $value);

pridat modifikator u

return (bool) preg_match("(^https?://(?:(?:$domain\\.)*$topDomain|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(:\d{1,5})?(/\S*)?\\z)ui", $value);

Cela metoda potom vyzera takto:

public static function isUrl($value)
{
	$alpha = 'a-zа-я\x80-\xFF';
	$domain = "[0-9$alpha](?:[-0-9$alpha]{0,61}[0-9$alpha])?";
	$topDomain = "[$alpha][-0-9$alpha]{0,17}[$alpha]";
	return (bool) preg_match("(^https?://(?:(?:$domain\\.)*$topDomain|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(:\d{1,5})?(/\S*)?\\z)ui", $value);
}

To iste plati aj pre validaciu emailovej adresy isEmail()

Su nejake lepsie navrhy? Alebo mozeme pridat pull request?

Editoval m@te (11. 9. 2012 15:57)

Filip Procházka
Moderator | 4668
+
0
-

Nechce se ti poslat pullrequest?

m@te
Člen | 4
+
0
-

nie je problem, len by sa to zislo vyladit.

Filip Procházka
Moderator | 4668
+
0
-

Oprav funkci, napiš testy, pošli pullrequest a Travis nám řekne, jestli je to funkční :)