Le filtre Pourquoi la dernière URL n'est-elle pas correctement validée? Et quelles sont les solutionnels possibles? Exécution de PHP 5.3.0. P> J'aimerais aussi savoir où je peux trouver le code source du fichier filtre_validate_url code> semble avoir des problèmes de validation de la validation des URL non-ASCII:
filtre_validate_url code> filtre de validation. P> p>
3 Réponses :
L'analyse commence ici:
http: // svn. php.net/viewvc/php/php-src/trunk/ext/filter/logical_filters.c?view=markup P>
et est réellement fait dans /trunk/ext/standard/url.c p>
À un premier coup d'œil, je ne vois rien qui rejette volontairement des caractères non-ASCII, il est donc probablement juste juste du manque de support unicode. PHP n'est pas bon pour gérer des personnages non-ASCII n'importe où. : ( p>
Humm ... si (! Isalnum (((Int) * (sans signé Char *) s) && * s! = '_' && * s! = ') Code> qui doit être la cause, Des solutions de contournement que vous pouvez penser?
@Alix - Comme Zneak a dit, vous pouvez utiliser filter_callback pour écrire vos propres fonctions de filtrage. Il devrait réellement fonctionner pour simplement copier et coller la fonction C dans un script PHP et remplacer Isalnum avec une fonction plus permissive. (Cela nécessitera un certain ajustement pour les pointeurs, mais pas beaucoup, je suppose.)
Techniquement, ce n'est pas une URL valide selon la section 5 du RFC 1738. Les navigateurs coderont automatiquement le caractère Ã% en C3% A3 avant d'envoyer la demande au serveur. L'URL complète techniquement valide Voici: http://pt.wikipedia.org/wiki/guimar % C3% a3es Passez-le sur le filtre validate_url et cela fonctionnera bien. Le filtre valide uniquement en fonction de la spécification, il n'essaie pas de corriger / encoder des caractères pour vous. P>
Le code suivant utilise filter_var mais encode des caractères non ASCII avant de l'appeler. J'espère que cela aide quelqu'un.
Vous pouvez trouver le code source avec le reste de la source de PHP. Il est librement disponible dans la section Téléchargements de leur site Web. A la mesure de votre question, cela ressemble à un bogue, et vous devriez le signaler. La seule solution de contournement que je pourrais suggérer est d'utiliser une autre logique (peut-être créer une fonction à utiliser avec filtre_callback dans le moment).