Position actuelle: Accueil> Derniers articles> Choses à noter lorsqu'ils traitent avec des caractères spéciaux

Choses à noter lorsqu'ils traitent avec des caractères spéciaux

gitbox 2025-05-26

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.

2. Problèmes d'analyse causés par des caractères spéciaux

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.

2.1 Personnages chinois et non ASCII

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

2.2 Espaces et symboles spéciaux

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);

2.3 Gestion des signes de livre (#)

# 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 .

2,4 Double codage Problème de pourcentage de signe (%)

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.

3. Des questions fréquemment posées et des suggestions de débogage

  • 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);

4. Résumé

  • 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.

Exemple de résumé de code

 $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.