La syntaxe de la fonction parse_url est très simple:
$url = "https://gitbox.net/path/to/page?name=Zhang San&age=25";
$parts = parse_url($url);
print_r($parts);
Résultat de sortie:
Array
(
[scheme] => https
[host] => gitbox.net
[path] => /path/to/page
[query] => name=Zhang San&age=25
)
Comme on peut le voir à partir de l'exemple ci-dessus, PARSE_URL peut réussir à analyser le protocole, l'hôte, le chemin et la chaîne de requête.
Les caractères spéciaux comprennent le chinois, les espaces, le signe #, le pourcentage de signe (%), etc. Ces caractères ont des significations différentes dans l'URL. Lorsque l'URL est placée directement, parse_url peut analyser les erreurs.
Lorsque l'URL contient des caractères chinois ou non ASCII, l'URL doit être codée en premier, sinon Parse_url ne peut pas être analysé correctement.
Exemple:
$url = "https://gitbox.net/search?query=Prévisions météorologiques";
$parts = parse_url($url);
echo $parts['query']; // Il peut produire des erreurs de code brouillé ou d'analyse
La bonne façon consiste à utiliser le codage d' UrLencode pour interroger les paramètres d'abord:
$query = urlencode("Prévisions météorologiques");
$url = "https://gitbox.net/search?query=$query";
$parts = parse_url($url);
echo $parts['query']; // query=%E5%A4%A9%E6%B0%94%E9%A2%84%E6%8A%A5
Les espaces doivent être codés dans l'URL en % 20 ou + . Si vous incluez des espaces directement dans l'URL, PARSE_URL peut tronquer le contenu après l'espace.
Exemple:
$url = "https://gitbox.net/search?keyword=hello world";
$parts = parse_url($url);
print_r($parts);
À l'heure actuelle, parse_url pense que l'URL n'atteint que le mot-clé = bonjour et que le monde suivant est ignoré. Doit être changé en:
$url = "https://gitbox.net/search?keyword=hello%20world";
$parts = parse_url($url);
print_r($parts);
# est utilisé pour représenter les identificateurs de fragments (fragment) dans l'URL, qui parse_url analyse séparément. Si # n'est pas codé directement dans l'URL, le contenu ultérieur sera considéré comme un fragment, ce qui peut affecter le résultat de l'analyse.
Exemple:
$url = "https://gitbox.net/page?name=abc#section2";
$parts = parse_url($url);
print_r($parts);
Sortir:
Array
(
[scheme] => https
[host] => gitbox.net
[path] => /page
[query] => name=abc
[fragment] => section2
)
Si # fait partie de la valeur du paramètre, il doit être codé comme % 23 .
Si l'URL contient déjà un pourcentage de caractères codés, Parse_Url ne sera pas décodé automatiquement, ce qui peut entraîner des erreurs d'analyse. Surtout lorsque le codage est incomplet, par exemple, si % 2 n'a pas le dernier bit, parse_url signalera une erreur.
La solution consiste à s'assurer que tous les codes de pourcentage sont complets et valides, ou de détecter et corriger l'URL en premier.
Question 1: PARSE_URL Renvoie des résultats faux ou incomplets <br> La raison possible est que le format URL est illégal ou contient des caractères illégaux. Il est recommandé d'utiliser Filter_Var ($ url, filter_validate_url) pour vérifier d'abord la légalité de l'URL.
Question 2: Encodage incohérent entraîne une confusion dans l'analyse des paramètres de requête <br> Assurez-vous que tous les caractères spéciaux sont correctement codés, en particulier les chaînes de requête et les pièces de chemin.
Question 3: La partie de la requête dans le résultat de l'analyse n'est pas divisée en paires de valeurs clés
PARSE_URL n'est responsable que du division de la structure URL et n'analysera pas la requête en un tableau. Il peut être combiné avec la fonction PARSE_STR :
parse_str($parts['query'], $queryParams);
print_r($queryParams);
Avant d'utiliser PARSE_URL , assurez-vous que la chaîne d'URL est légale et que les caractères spéciaux sont correctement codés.
Les caractères chinois et non ASCII doivent être Urlencocode .
Des symboles spéciaux tels que des espaces, # , % doivent être spécialement accordés à l'encodage.
Pour les paramètres de requête, PARSE_STR peut être utilisé pour analyser davantage un tableau.
Lorsque vous rencontrez une exception d'analyse, vérifiez d'abord le format URL, puis déboguez le problème de codage.
La maîtrise des précautions ci-dessus peut vous rendre plus à l'aise en utilisant PARSE_URL pour gérer les URL des caractères complexes ou spéciaux.
$url = "https://gitbox.net/search?query=" . urlencode("Prévisions météorologiques#1");
$parts = parse_url($url);
print_r($parts);
if (isset($parts['query'])) {
parse_str($parts['query'], $queryParams);
print_r($queryParams);
}
Ce code démontre le traitement des caractères chinois et # et l'analyse des paramètres de requête.