Position actuelle: Accueil> Derniers articles> PARSE_URL Comment gérer les URL avec des adresses IPv6?

PARSE_URL Comment gérer les URL avec des adresses IPv6?

gitbox 2025-05-20

Dans PHP, PARSE_URL est une fonction commune utilisée pour diviser les URL en leurs composants, tels que le schéma, l'hôte, le port, le chemin, la requête, etc. Cette fonction est très pratique dans le développement quotidien, mais lorsque l'URL contient une adresse IPv6, son comportement sera légèrement plus compliqué. Cet article explorera le comportement et les précautions de parse_url lorsqu'ils traitent des URL contenant des adresses IPv6.

Comment représenter les adresses IPv6 dans les URL

Selon RFC 3986 , lorsque la partie hôte d'une URL est une adresse IPv6, elle doit être enveloppée entre crochets. Par exemple:

 http://[2001:db8::1]:8080/path?query=1

Le but des crochets est de se séparer du côlon du numéro de port et d'éviter l'analyse de l'ambiguïté.

Comportement de base de Parse_url

La syntaxe de fonction PARSE_URL de PHP est la suivante:

 parse_url(string $url, int $component = -1): array|string|false

Lors du passage d'une URL contenant une adresse IPv6, PARSE_URL peut identifier et extraire correctement la partie hôte. Jetons un coup d'œil à un exemple spécifique:

 $url = 'http://[2001:db8::1]:8080/path?query=1';
$parts = parse_url($url);

print_r($parts);

Le résultat de la sortie est:

 Array
(
    [scheme] => http
    [host] => 2001:db8::1
    [port] => 8080
    [path] => /path
    [query] => query=1
)

Comme vous pouvez le voir, bien que les crochets soient utilisés dans l'adresse IPv6 dans l'URL d'origine, PARSE_URL supprimera les supports carrés dans le résultat de retour, ne laissant que la partie d'adresse pure. Il s'agit d'un comportement qui convient aux attentes.

Exemple d'utilisation d'erreur

Si l'adresse IPv6 n'est pas enveloppée correctement entre crochets dans l'URL, PARSE_URL ne sera pas analysé correctement. Par exemple:

 $url = 'http://2001:db8::1:8080/path';
$parts = parse_url($url);

Ce code reviendra faux car parse_url ne peut pas déterminer si 2001: DB8 :: 1: 8080 est un port hôte ou hôte plus, ce qui entraîne une ambiguïté de syntaxe.

résumé

  • PARSE_URL prend en charge les URL d'analyse contenant des adresses IPv6, à condition que les adresses IPv6 doivent être enveloppées dans des crochets [] .

  • Le champ hôte du résultat de retour ne contient pas de crochets.

  • Si l'adresse IPv6 n'est pas enveloppée entre crochets, Parse_Url ne parviendra pas à analyser et à retourner faux .

  • Cette fonction s'applique à la plupart des URL canoniques, mais n'effectue pas de vérification de validité de l'URL (par exemple, ne vérifie pas que l'adresse IP est légale).

Conseils pratiques

Lorsque vous utilisez PARSE_URL pour traiter les URL (en particulier dans les scénarios où les adresses IPv6 peuvent être incluses), assurez-vous que l'URL d'entrée suit la norme RFC, en particulier le format correct pour la partie hôte. S'il s'agit d'une URL entrée par l'utilisateur, il est recommandé de prétraiter et de vérifier le format avant d'appeler Parse_url pour éviter les problèmes de défaillance ou de sécurité d'analyse.