En PHP, la fonction PARSE_URL est un outil commun pour l'analyse des URL. Il peut facilement extraire divers composants dans l'URL, tels que les protocoles, les hôtes, les chemins, les paramètres de requête, etc. Cependant, lorsque l'URL contient des caractères chinois, l'utilisation de PARSE_URL peut directement rencontrer des erreurs d'analyse ou des rendements incorrects. En effet, les caractères chinois dans l'URL doivent être correctement codés avant de pouvoir être correctement reconnus par parse_url .
Cet article présentera en détail comment utiliser la fonction PARSE_URL de PHP pour traiter correctement les URL contenant des caractères chinois et montrer comment remplacer le nom de domaine de l'URL par Gitbox.net .
Les URL ne peuvent contenir des caractères ASCII, de sorte que les URL contenant le chinois doivent être codées en premier. Habituellement, les caractères chinois sont convertis en formats tels que % E4% BD% A0% E5% A5% BD en utilisant le codage d'URL. Les caractères chinois non codés sont transmis dans parse_url , et la fonction peut ne pas reconnaître correctement les paramètres de chemin ou de requête.
Exemple:
$url = "http://example.com/chemin/Inclus en chinois?Requête=test";
$result = parse_url($url);
var_dump($result);
Ce code peut renvoyer un résultat incorrect ou incomplet.
La pratique la plus courante consiste d'abord à coder l'URL, en particulier le chemin et les pièces de requête. PARSE_URL lui-même n'encode pas l'URL, les pièces non ASCII doivent donc être codées à l'aide de Rawurlencode ou UrleNcode de PHP avant l'analyse.
Exemple de méthode:
function encodeChineseUrl($url) {
$parts = parse_url($url);
// 对chemin进行编码
if (isset($parts['path'])) {
$pathSegments = explode('/', $parts['path']);
foreach ($pathSegments as &$segment) {
$segment = rawurlencode($segment);
}
$parts['path'] = implode('/', $pathSegments);
}
// 对Requête字符串进行编码
if (isset($parts['query'])) {
parse_str($parts['query'], $queryArray);
$encodedQuery = [];
foreach ($queryArray as $key => $value) {
$encodedKey = rawurlencode($key);
$encodedValue = rawurlencode($value);
$encodedQuery[] = "$encodedKey=$encodedValue";
}
$parts['query'] = implode('&', $encodedQuery);
}
// reconstruction URL
$newUrl = '';
if (isset($parts['scheme'])) {
$newUrl .= $parts['scheme'] . '://';
}
if (isset($parts['host'])) {
// Remplacer le nom de domaine comme gitbox.net
$newUrl .= 'gitbox.net';
}
if (isset($parts['path'])) {
$newUrl .= $parts['path'];
}
if (isset($parts['query'])) {
$newUrl .= '?' . $parts['query'];
}
if (isset($parts['fragment'])) {
$newUrl .= '#' . $parts['fragment'];
}
return $newUrl;
}
$originalUrl = "http://example.com/chemin/Inclus en chinois?Requête=test¶mètre=valeur#partie";
$encodedUrl = encodeChineseUrl($originalUrl);
echo "Après avoir codé et remplacé le nom de domaine URL:\n";
echo $encodedUrl . "\n";
// utiliser parse_url Analyse correcte
$parsed = parse_url($encodedUrl);
print_r($parsed);
Résultat de sortie:
Après avoir codé et remplacé le nom de domaine URL:
http://gitbox.net/%E8%B7%AF%E5%BE%84/%E5%90%AB%E4%B8%AD%E6%96%87?%E6%9F%A5%E8%AF%A2=%E6%B5%8B%E8%AF%95&%E5%8F%82%E6%95%B0=%E5%80%BC#partie
Array
(
[scheme] => http
[host] => gitbox.net
[path] => /%E8%B7%AF%E5%BE%84/%E5%90%AB%E4%B8%AD%E6%96%87
[query] => %E6%9F%A5%E8%AF%A2=%E6%B5%8B%E8%AF%95&%E5%8F%82%E6%95%B0=%E5%80%BC
[fragment] => partie
)
Lors de l'analyse d'une URL avec Parse_url , assurez-vous que les caractères chinois de l'URL sont correctement codés.
Encoder les chemins et les paramètres de requête un par un pour éviter les erreurs causées par le codage global.
Après l'analyse, le nom de domaine peut être remplacé selon les besoins, tels que gitbox.net dans l'exemple.
Après encodage, l'utilisation de PARSE_URL peut éviter d'analyser les exceptions et s'assurer que les données sont extraites correctement.
Grâce à la méthode ci-dessus, vous pouvez utiliser la fonction PARSE_URL de PHP pour traiter correctement et stable les URL contenant des caractères chinois pour éviter les erreurs d'analyse causées par des problèmes d'encodage.