PHP에서 parse_url 함수는 URL을 구문 분석하는 일반적인 도구입니다. 프로토콜, 호스트, 경로, 쿼리 매개 변수 등과 같은 URL에서 다양한 구성 요소를 쉽게 추출 할 수 있습니다. 그러나 URL에 중국어가 포함 된 경우 Parse_url을 직접 사용하면 구문 분석 오류 또는 잘못된 반환이 발생할 수 있습니다. Parse_url이 올바르게 인식하기 전에 URL의 한자가 올바르게 인코딩되어야하기 때문입니다.
이 기사는 PHP의 parse_url 함수를 사용하여 중국어가 포함 된 URL을 올바르게 처리하고 URL의 도메인 이름을 gitbox.net 으로 바꾸는 방법을 자세히 설명합니다.
URL에는 ASCII 문자 만 포함 할 수 있으므로 중국어를 포함하는 URL은 먼저 인코딩되어야합니다. 일반적으로 한자는 URL 인코딩을 사용하여 %E4%BD%A0%E5%A5%BD 와 같은 형식으로 변환됩니다. 인코딩되지 않은 한자는 parse_url 로 전달되며 함수는 경로 또는 쿼리 매개 변수를 올바르게 인식하지 못할 수 있습니다.
예:
$url = "http://example.com/길/중국어에 포함?질문=시험";
$result = parse_url($url);
var_dump($result);
이 코드는 잘못되거나 불완전한 결과를 반환 할 수 있습니다.
가장 일반적인 관행은 우선 URL, 특히 경로 및 쿼리 부품을 인코딩하는 것입니다. parse_url 자체는 URL을 인코딩하지 않으므로 ASCII가 아닌 부분은 구문 분석하기 전에 PHP의 rawUrlencode 또는 urlencode를 사용하여 인코딩해야합니다.
예제 방법 :
function encodeChineseUrl($url) {
$parts = parse_url($url);
// 对길进行编码
if (isset($parts['path'])) {
$pathSegments = explode('/', $parts['path']);
foreach ($pathSegments as &$segment) {
$segment = rawurlencode($segment);
}
$parts['path'] = implode('/', $pathSegments);
}
// 对질문字符串进行编码
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);
}
// 재건 URL
$newUrl = '';
if (isset($parts['scheme'])) {
$newUrl .= $parts['scheme'] . '://';
}
if (isset($parts['host'])) {
// 도메인 이름을 대체하십시오 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/길/중국어에 포함?질문=시험&매개 변수=값#부분";
$encodedUrl = encodeChineseUrl($originalUrl);
echo "도메인 이름을 인코딩하고 교체 한 후 URL:\n";
echo $encodedUrl . "\n";
// 사용 parse_url 올바른 분석
$parsed = parse_url($encodedUrl);
print_r($parsed);
출력 결과 :
도메인 이름을 인코딩하고 교체 한 후 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#부분
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] => 부분
)
parse_url 로 URL을 구문 분석 할 때 URL의 한자가 올바르게 인코딩되어 있는지 확인하십시오.
전체 인코딩으로 인한 오류를 피하기 위해 경로와 쿼리 매개 변수를 하나씩 인코딩합니다.
구문 분석 후 도메인 이름은 예를 들어 gitbox.net 과 같은 필요에 따라 교체 할 수 있습니다.
인코딩 후 Parse_url을 사용하면 구문 분석 예외를 피하고 데이터가 올바르게 추출되도록 할 수 있습니다.
위의 방법을 통해 PHP의 parse_url 함수를 사용하여 중국어가 포함 된 URL을 올바르게 처리하여 인코딩 문제로 인한 오류를 피할 수 있습니다.
관련 태그:
URL