Dans PHP, Parse_Url est une fonction puissante pour l'analyse des URL. Il peut diviser une URL en plusieurs parties (telles que le schéma, l'hôte, le chemin, la requête, etc.), ce qui facilite considérablement le traitement des URL par les développeurs. Cependant, si vous rencontrez une situation où FALSE est retourné lors de l'utilisation de Parse_Url , cela signifie que l'analyse a échoué. Cet article analysera en profondeur les raisons courantes pour lesquelles parse_url renvoie FALS et comment y faire face.
Regardons d'abord un exemple d'utilisation normal:
$url = "https://gitbox.net/path/to/resource?query=123";
$parsed = parse_url($url);
print_r($parsed);
La sortie sera:
Array
(
[scheme] => https
[host] => gitbox.net
[path] => /path/to/resource
[query] => query=123
)
Lorsque PARSE_URL gère une URL correctement structurée, il renvoie un tableau associatif contenant les différents composants de l'URL. Cependant, si l'entrée ne respecte pas la spécification, elle renvoie False .
PARSE_URL dépend en interne de la spécification RFC 3986, et l'analyse échouera si l'URL contient des caractères illégaux (tels que des espaces, certains caractères de contrôle, des caractères spéciaux non recommandés, etc.).
Exemple:
$url = "http://gitbox.net/chemin/ressource"; // Chinois non codé
$result = parse_url($url); // retour false
Solution:
Effectuez URLencode ou codage partiel de l'URL pour s'assurer qu'il est conforme à la spécification.
$url = "http://gitbox.net/" . urlencode("chemin/ressource");
parse_url nécessite qu'une chaîne soit transmise. Si vous passez dans un tableau, un objet ou un nul , il renverra directement faux .
Exemple:
$url = null;
$result = parse_url($url); // retour false
Solution:
Assurez-vous que le type de chaîne est passé:
$url = (string)$url;
Bien que PARSE_URL prenne en charge les chemins relatifs (tels que /index.php ), dans certaines versions, FALSE peut être renvoyé s'il n'y a pas de schéma et que le format est confus.
Exemple:
$url = "://gitbox.net"; // Manque scheme Préfixe
$result = parse_url($url); // retour false
Solution:
URL complète:
$url = "http://gitbox.net";
Si l'URL est trop grande, contient un grand nombre de paramètres imbriqués ou est construit si complexe qu'il ne peut pas être analysé par des fonctions intégrées, elle peut également entraîner l'échec de l'analyse.
Solution:
Essayez de simplifier l'URL ou d'effectuer une vérification régulière de correspondance et de structure avant de passer.
Pour empêcher Parse_Url d'échouer, les stratégies suivantes peuvent être adoptées:
Vérification stricte de l'entrée de l'utilisateur : utilisez la fonction régulière ou filtrante filter_var ($ url, filter_validate_url) .
Prétraitez l'URL : comme l'utilisation de la garniture pour éliminer les espaces supplémentaires et les chemins de codage d' URLENCOD .
Mécanisme de gestion des erreurs : après avoir appelé Parse_Url , déterminez d'abord s'il est faux , puis effectuez des opérations ultérieures.
Exemple de code:
$url = "https://gitbox.net/path?query=value";
if (($parsed = parse_url($url)) === false) {
echo "URL invalide";
} else {
print_r($parsed);
}
Différentes versions de PHP peuvent avoir une tolérance de défaut différente pour Parse_url . Par exemple, il y a une différence dans la gestion des caractères illégaux ou des schémas manquants entre PHP 5.x et PHP 7.x / 8.x. Par conséquent, dans le développement croisé, il est recommandé de toujours s'assurer que les URL juridiques, complètes et compatibles RFC 3986 sont passées.