현재 위치: > 최신 기사 목록> 특수 캐릭터를 다룰 때 주목해야 할 사항

특수 캐릭터를 다룰 때 주목해야 할 사항

gitbox 2025-05-26

parse_url 함수의 구문은 매우 간단합니다.

 $url = "https://gitbox.net/path/to/page?name=장 산&age=25";
$parts = parse_url($url);
print_r($parts);

출력 결과 :

 Array
(
    [scheme] => https
    [host] => gitbox.net
    [path] => /path/to/page
    [query] => name=장 산&age=25
)

위의 예에서 알 수 있듯이 Parse_url은 프로토콜, 호스트, 경로 및 쿼리 문자열을 성공적으로 구문 분석 할 수 있습니다.

2. 특수 문자로 인한 분석 문제

특수 문자에는 중국어, 공간, # 부호, 백분율 부호 (%) 등이 포함됩니다.이 문자들은 URL에서 다른 의미를 갖습니다. URL이 직접 배치되면 Parse_url은 오류를 구문 분석 할 수 있습니다.

2.1 중국어 및 비 ASCII 문자

URL에 중국어 또는 기타 비 ASCII 문자가 포함 된 경우 URL은 먼저 인코딩되어야합니다. 그렇지 않으면 Parse_URL이 제대로 구문 분석되지 않을 수 있습니다.

예:

 $url = "https://gitbox.net/search?query=일기 예보";
$parts = parse_url($url);
echo $parts['query'];  // garbled 코드 또는 구문 분석 오류를 출력 할 수 있습니다

올바른 방법은 Query 매개 변수에 urlencode 인코딩을 사용하는 것입니다.

 $query = urlencode("일기 예보");
$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 공간 및 특수 기호

우주는 URL에서 %20 또는 + 로 인코딩되어야합니다. URL에 직접 공백을 포함하는 경우 Parse_url은 공간 후에 컨텐츠를 자울 수 있습니다.

예:

 $url = "https://gitbox.net/search?keyword=hello world";
$parts = parse_url($url);
print_r($parts);

현재 Parse_url은 URL이 키워드 = 안녕하세요 에 도달하고 후속 세계는 무시한다고 생각합니다. 다음으로 변경해야합니다.

 $url = "https://gitbox.net/search?keyword=hello%20world";
$parts = parse_url($url);
print_r($parts);

2.3 파운드 표지판 처리 (#)

# 는 URL에서 조각 식별자 (조각)를 나타내는 데 사용되며, Parse_url은 별도로 구문 분석됩니다. # 이 URL에서 직접 인코딩되지 않으면 후속 컨텐츠가 조각으로 간주되며, 이는 구문 분석 결과에 영향을 줄 수 있습니다.

예:

 $url = "https://gitbox.net/page?name=abc#section2";
$parts = parse_url($url);
print_r($parts);

산출:

 Array
(
    [scheme] => https
    [host] => gitbox.net
    [path] => /page
    [query] => name=abc
    [fragment] => section2
)

#이 매개 변수 값의 일부인 경우 %23 으로 인코딩해야합니다.

2.4 백분율 부호의 이중 인코딩 문제 (%)

URL에 이미 인코딩 된 문자가 포함 된 경우 Parse_url은 자동으로 디코딩되지 않으므로 오류가 발생할 수 있습니다. 특히 인코딩이 불완전한 경우, 예를 들어 %2 에 마지막 비트가 부족하면 Parse_url은 오류를보고합니다.

솔루션은 모든 백분율 코드가 완전하고 유효한지 확인하거나 먼저 URL을 감지하고 수정하는 것입니다.

3. 자주 묻는 질문 및 디버깅 제안

  • 질문 1 : parse_url은 거짓 또는 불완전한 결과를 반환합니다 <br> 가능한 이유는 URL 형식이 불법이거나 불법 문자를 포함하기 때문입니다. Filter_var ($ url, filter_validate_url)를 사용하여 우선 URL의 합법성을 확인하는 것이 좋습니다.

  • 질문 2 : 일관되지 않은 인코딩은 쿼리 매개 변수 파싱의 혼란을 초래합니다 <br> 모든 특수 문자가 올바르게 인코딩되어 있는지, 특히 쿼리 문자열 및 경로 부품을 확인하십시오.

  • 질문 3 : 구문 분석 결과의 쿼리 부분은 키 값 쌍으로 분할되지 않습니다.
    parse_url은 URL 구조를 분할 할 책임이 있으며 쿼리를 배열로 구문 분석하지 않습니다. parse_str 함수와 결합 할 수 있습니다.

 parse_str($parts['query'], $queryParams);
print_r($queryParams);

4. 요약

  • parse_url을 사용하기 전에 URL 문자열이 합법적이고 특수 문자가 올바르게 인코딩되어 있는지 확인하십시오.

  • 중국어 및 비 ASCII 문자는 UrlenCode 여야합니다.

  • 공백, # , % 와 같은 특별 기호는 인코딩에 특별히주의를 기울여야합니다.

  • 쿼리 매개 변수의 경우 parse_str를 사용하여 배열로 추가로 구문 분석 할 수 있습니다.

  • 구문 분석 예외가 발생하면 먼저 URL 형식을 확인한 다음 인코딩 문제를 디버깅하십시오.

위의 예방 조치를 마스터하면 parse_url을 사용하여 복잡한 특수 문자 URL을 처리 할 수 ​​있습니다.

샘플 코드 요약

 $url = "https://gitbox.net/search?query=" . urlencode("일기 예보#1");
$parts = parse_url($url);
print_r($parts);

if (isset($parts['query'])) {
    parse_str($parts['query'], $queryParams);
    print_r($queryParams);
}

이 코드는 중국어 및 # 문자의 처리 및 쿼리 매개 변수의 구문 분석을 보여줍니다.