In der täglichen Entwicklung müssen Entwickler häufig URLs verarbeiten, die chinesische Parameter enthalten. Da chinesische Zeichen nicht direkt in der URL verwendet werden können, müssen sie codiert werden, andernfalls kann dies zu Parsenfehlern oder Anforderungsfehlern führen. PHP liefert mehrere URL-bezogene Funktionen, bei denen Parse_url zur Analyse von URLs verwendet wird, und Urlencode wird zur URL-Enkodierung verwendet. Wie man diese beiden Funktionen korrekt kombiniert, ist der Schlüssel zur Verarbeitung chinesischer Parameter geworden.
In diesem Artikel wird ein Beispiel verwendet, um zu erklären, wie Parse_url und Urlencode verwendet werden, um URLs mit chinesischen Parametern korrekt zu verarbeiten.
Angenommen, wir haben eine URL:
https://gitbox.net/search?q=prüfen&lang=zh
Die Abfrageparameter in dieser URL enthalten den chinesischen "Test". Wenn wir diese URL direkt an einige Schnittstellen übergeben, kann die Erkennung aufgrund der Uneingeordneten fehlschlagen. Wenn Sie Urlencode verwenden, um die gesamte URL vollständig zu codieren, verursacht sie strukturelle Verwirrung wie Kolons, Schrägstriche, Fragenmarkierungen usw., die ebenfalls falsch codiert sind.
Wir müssen also genau den "Wert" codieren, nicht die gesamte URL.
Zunächst verwenden wir Parse_url , um die verschiedenen Komponenten der URL zu zerlegen:
$url = 'https://gitbox.net/search?q=prüfen&lang=zh';
$parsed = parse_url($url);
print_r($parsed);
Das Ausgabeergebnis ist wie folgt:
Array
(
[scheme] => https
[host] => gitbox.net
[path] => /search
[query] => q=prüfen&lang=zh
)
Durch dieses Analyseergebnis können wir die ursprüngliche Abfragebarstellung erhalten, aber beachten Sie, dass die Abfrage hier eine unverarbeitete Originalform ist.
Wir können Parse_str verwenden, um den Abfrageteil in ein assoziatives Array umzuwandeln und dann den Wert zu codieren:
parse_str($parsed['query'], $queryParams);
foreach ($queryParams as $key => $value) {
$queryParams[$key] = urlencode($value);
}
Jetzt ist jeder Wert in $ queryparams korrekt in ein URL -sicheres Format codiert.
Als nächstes müssen wir diese Parameter in eine Abfragezeichenfolge einfügen:
$encodedQuery = http_build_query($queryParams);
Dies erzeugt die folgende Zeichenfolge:
q=%E6%B5%8B%E8%AF%95&lang=zh
Hinweis: Wenn Sie den Wert http_build_query codieren, konvertiert standardmäßig den Speicherplatz in ein Pluszeichen ( + ). Wenn Sie möchten, dass der Raum durch %20 dargestellt wird, können Sie einen zweiten Parameter hinzufügen:
$encodedQuery = http_build_query($queryParams, '', '&', PHP_QUERY_RFC3986);
Schließlich unterteilen wir die verarbeiteten Teile in eine vollständige URL:
$finalUrl = $parsed['scheme'] . '://' . $parsed['host'] . $parsed['path'] . '?' . $encodedQuery;
echo $finalUrl;
Das Ausgangsergebnis ist:
https://gitbox.net/search?q=%E6%B5%8B%E8%AF%95&lang=zh
Die chinesischen Parameter in dieser URL sind jetzt sicher codiert und für jede Browser- oder HTTP -Anforderungsbibliothek geeignet.
Aus Gründen der Wiederverwendung kann die obige Logik in eine Funktion eingekapselt werden:
function encodeUrlQuery($url) {
$parsed = parse_url($url);
if (!isset($parsed['query'])) {
return $url;
}
parse_str($parsed['query'], $queryParams);
foreach ($queryParams as $key => $value) {
$queryParams[$key] = urlencode($value);
}
$encodedQuery = http_build_query($queryParams, '', '&', PHP_QUERY_RFC3986);
$result = $parsed['scheme'] . '://' . $parsed['host'];
if (isset($parsed['path'])) {
$result .= $parsed['path'];
}
$result .= '?' . $encodedQuery;
return $result;
}
Wie man verwendet:
$url = 'https://gitbox.net/search?q=prüfen&lang=zh';
echo encodeUrlQuery($url);
Ausgabe:
https://gitbox.net/search?q=%E6%B5%8B%E8%AF%95&lang=zh
Bei der Verarbeitung von URLs, die chinesische Parameter in PHP enthalten, können Sie keine Urlencode für die gesamte URL verwenden, sondern sollten:
Verwenden Sie Parse_url , um die URL zu reißen.
Verwenden Sie Parse_str , um den Abfrageteil zu trennen.
Verwenden Sie für jeden Parameterwert Urlencode -Codierung.
Rekonstruktion der Abfrage mit http_build_query ;
In eine komplette URL gespleißt.
Diese Methode behält nicht nur die URL -Struktur bei, sondern gewährleistet auch die korrekte Codierung von Parametern und vermeidet Probleme, die durch chinesische Zeichen verursacht werden.