2011-01-20 5 views
61

검색어를 입력하고 양식이 search.php?query=your query에 제출 된 검색 페이지를 만들고 있습니다. 어떤 PHP 함수가 최고이며 검색 쿼리를 인코딩/디코딩하는 데 사용해야합니까?PHP에서 URL을 올바르게 URL 인코딩하는 방법은 무엇입니까?

+2

문제가 있습니까? 브라우저와 PHP는 자동으로이를 처리해야합니다 (예 : 텍스트 필드에'foo bar '를 넣고 URL에'foo + bar'를 생성). –

+0

@Felix 나는'file_get_contents'를 사용하여 searcher 스크립트를 호출 할 것입니다. –

답변

108

URI 쿼리의 경우 urlencode/urldecode; 다른 용도로는 rawurlencode/rawurldecode을 사용하십시오.

urlencoderawurlencode 차이는

  • rawurlencode 함께 인코딩 일반 Percent-Encoding (공간에 따라 인코딩 동안

  • +0

    * application/x-www-form-urlencoded *는 * Percent-Encoding *은 HTML 양식 데이터를 인코딩하는 경우에만 적용됩니다. – Gumbo

    +0

    더 나은 인코딩은 form-urlencoded 또는 percent입니까? –

    +1

    @ Upvote를 클릭하십시오 : 그런 식으로는 비교할 수 없습니다. * application/x-www-form-urlencoded * 형식은 공간이 % 20 대신에 +로 인코딩된다는 점을 제외하고 * Percent-Encoding * 형식입니다. 게다가 * application/x-www-form-urlencoded *는 * Percent-Encoding *이 좀 더 일반적인 용도로 사용되는 동안 양식 데이터를 인코딩하는 데 사용됩니다. – Gumbo

    14

    교묘히 명명 된 urlencode()urldecode().

    그러나 및 $_GET에 나타나는 변수에는 urldecode()을 사용할 필요가 없습니다.

    +3

    교묘하게 이름 붙인'rawurlencode'와'rawurldecode' ... –

    2

    예외적 인 인코딩이 필요한 사용 사례입니다. 어쩌면 당신은 그것을 고안 한 것 같지만, 우리는 이것을 생산 단계에서 운영합니다. 우연히도 모든 유형의 인코딩을 다루므로 튜토리얼로 게시하고 있습니다.

    사용 사례 설명

    누군가가 우리의 웹 사이트에 선불 기프트 카드 ("토큰")를 샀다. 토큰에는 URL을 사용하여 해당 URL을 사용합니다. 이 고객은 다른 사람에게 이메일을 보내려고합니다. 당사 웹 페이지에는이를 수행 할 수있는 mailto 링크가 포함되어 있습니다.

    PHP 코드

    // The order system generates some opaque token 
    $token = 'w%a&!e#"^2(^@azW'; 
    
    // Here is a URL to redeem that token 
    $redeemUrl = 'https://httpbin.org/get?token=' . urlencode($token); 
    
    // Actual contents we want for the email 
    $subject = 'I just bought this for you'; 
    $body = 'I just bought a widget for you. Please enter your shipping details here: ' . $redeemUrl; 
    
    // A URI for the email as prescribed 
    $mailToUri = 'mailto:?subject=' . rawurlencode($subject) . '&body=' . rawurlencode($body); 
    
    // Print an HTML element that links to that page 
    echo '<a href="' . htmlspecialchars($mailToUri) . '">Email your friend</a>'; 
    

    참고 : 위의 당신이 text/html 문서를 출력하는 것으로 가정합니다. 출력 미디어 유형이 text/json 인 경우 출력 인코딩이 json_encode()으로 처리되기 때문에 $retval['url'] = $mailToUri;을 사용하면됩니다.

    테스트 케이스

    1. 하는 PHP 테스트 사이트의 코드를 실행 (내가 여기 언급해야 정규 일이?)
    2. 보내기 이메일을 링크
    3. 을 클릭
    4. 이메일 받기
    5. 해당 링크를 클릭하십시오.

    당신은 볼 수 :

    "args": { 
        "token": "w%a&!e#\"^2(^@azW" 
    }, 
    

    그리고 물론

    이 위 $token의 JSON 표현입니다.

    관련 문제