web-dev-qa-db-fra.com

Fonction de validation de données intégrée pour les URL

J'ai un formulaire frontal où les gens peuvent soumettre l'URL de leur site Web.

En fait, je vérifie les URL dans Wordpress avec une fonction PHP et j'aimerais savoir s'il existe une fonction intégrée qui me permet de le faire.

C'est la fonction que j'utilise réellement:

function validateURL($URL) {
    $v = "/^(http|https|ftp):\/\/([A-Z0-9][A-Z0-9_-]*(?:\.[A-Z0-9][A-Z0-9_-]*)+):?(\d+)?\/?/i";
    return (bool)preg_match($v, $URL);
}
2
roastedtoast

Utilisez esc_url( $url ) pour les URL à afficher et esc_url_raw( $url ) si l'URL doit être envoyée à la base de données.

  • Le premier va remplacer les esperluettes nues & par &.
  • Le second est un wrapper pour le premier; cela supprimera simplement l'échappement des esperluettes.
  • Les deux fonctions vont vérifier le protocole. Voir wp_allowed_protocols() pour la liste: 'http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'Gopher', 'nntp', 'feed', 'telnet', 'mms', 'rtsp', 'svn', 'tel', 'fax', 'xmpp' Ainsi, une URL telle que javascript:alert("Hacked!"); ne sera pas transmise.

Ces fonctions ne sont pas exactement des validateurs . Ils nettoient la valeur. Mais vous devriez les utiliser chaque fois que vous avez une URL à enregistrer ou à afficher.

Il y a aussi wp_validate_redirect( $location, $default ).

$location est une URL ici et $default une URL de secours si la première valeur n'est pas validée. À partir de son bloc de documentation:

Valide une URL à utiliser dans une redirection.

Vérifie si l'emplacement $ utilise un hôte autorisé, s'il possède un chemin absolu. Un plugin peut donc définir ou supprimer des hôtes autorisés de la liste.

Notez que les hôtes autorisés n'incluent pas tous les (sous) domaines d'une installation multisite. Aucune idée pourquoi.

5
fuxia

Il n'y a pas de fonction qui valide une URL, juste une qui nettoie une chaîne pour l'utiliser dans une URL ( sanitize_title ).

Il existe un filtre PHP qui validera les URL: FILTER_VALIDATE_URL .

3
Milo