filter_var ($ url, FILTER_VALIDATE_URL) agissant bizarrement en PHP 5.3.2

Pour des raisons étranges, la fonction ci-dessous indique que cette URL “paradox-productions.net” est invalide sur http://alpha.shurl.be/ et valide sur mon localhost. Est-ce un bug dans PHP ou ce qui pourrait causer cela? Quelqu’un qui peut le confirmer? Possible de résoudre ou ai-je besoin d’une mise à niveau de PHP sur mon serveur?

phpinfo: http://alpha.shurl.be/phpinfo.php

fonction:

  

C’est un bogue connu de PHP 5.3.2. Il pense que les URL avec des tirets sont invalides. Voir https://bugs.php.net/bug.php?id=51258 . Votre PHP local doit être une version différente où ce bogue n’est pas présent.

Si vous pouvez effectuer une mise à niveau vers une version de travail, probablement une bonne idée de le faire. Si vous ne pouvez pas, vous pouvez contourner ce problème en supprimant tous les tirets séparés par d’autres caractères d’URL valides avant de valider. La regex ci-dessous n’est pas parfaite, mais elle devrait fonctionner si vous savez que les tirets n’apparaîtront qu’entre des lettres, des chiffres ou des traits de soulignement (généralement vrai, mais sachez que cela ne résoudra pas certains cas improbables).

 $url_to_validate = preg_replace("/([\w\d])-(?=[\w\d])/", '\\1\\2', $url); 

\w signifie “n’importe quelle lettre ou trait de soulignement” et \d signifie “n’importe quel chiffre”, donc [\w\d] signifie n’importe quelle lettre, chiffre ou trait de soulignement. Le second nécessite une assertion de type lookahead positive (utiliser (?=...) ) pour s’assurer qu’il capture tous les tirets dans des séquences comme abcde (sans lui, il manquerait tout autre tiret dans cette séquence).

Voici le corps du rapport de bogue:

La description:

FILTER_VALIDATE_URL n’autorise pas les tirets / traits d’union dans le nom d’hôte. C’est idiot.

Script de test:

 $ php -r 'var_dump(filter_var("http://www.something.com/", FILTER_VALIDATE_URL));' $ php -r 'var_dump(filter_var("http://www.some-thing.com/", FILTER_VALIDATE_URL));' 

Résultat attendu:

 $ php -r 'var_dump(filter_var("http://www.something.com/", FILTER_VALIDATE_URL));' ssortingng(25) "http://www.something.com/" $ php -r 'var_dump(filter_var("http://www.some-thing.com/", FILTER_VALIDATE_URL));' ssortingng(26) "http://www.some-thing.com/" 

Résultat actuel:

 $ php -r 'var_dump(filter_var("http://www.something.com/", FILTER_VALIDATE_URL));' ssortingng(25) "http://www.something.com/" $ php -r 'var_dump(filter_var("http://www.some-thing.com/", FILTER_VALIDATE_URL));' bool(false)