2011-02-23 5 views
4

이것은 PHP입니다.헤더 (위치 : 값)의 값을 urlencode해도 괜찮습니까?

나는

header("Location: " . $url) 

을하고 잘 작동합니다. 하지만 내가한다면

header("Location: " . urlencode($url)) 

저는 $ url/$ url 같은 이상한 곳으로 리다이렉트되어 있습니다.

하지만 사용자가 제공 한 데이터로 구성되어 있기 때문에 URL을 urlencode하고 싶습니다. 내가 어떻게 해? 나는 그것을 "http : //"및 "나머지"unl url을 "휴식"할 수 있습니까?

이 상황에서 권장되는 방법은 무엇입니까?

감사

답변

5

그러나이 사용자가 제공 한 데이터

솔루션으로 만든 있기 때문에 내 URL을를 urlencode하고 싶어, 인코딩을하기 만하면 비트 인코딩을 전체 URL을 인코딩하지 않는 것입니다 . "나머지 부분"만 인코딩하면 오류가 발생합니다. 예를 들어,이 예제에서는 모든 슬래시는 ?= 그대로 유지해야합니다

http://www.example.com/rewritten directory/index.php?id=Hello World, how are you? 

하지만 당신은 유효한 URL을 형성 할 수있는 모든 일의 순서를 rewritten directoryHello World, how are you? 를 인코딩 할 필요가 없습니다.

문자 인코딩과 마찬가지로 인코딩 된 내용을 처음부터 알고 있어야합니다. 귀하의 문제에 대한 해결책 (전혀 없을 경우 - header())은 처음에는 urlencode() 없이도 작동 할 것입니다!) 귀하의 코드에서 더 나아질 가능성이 있습니다.

2

URL을 "http : //"및 "나머지"로 나누려면 PHP의 parse_url()parse_str() 함수를 참조하십시오.

편집 : 이것은 당신이 쿼리 문자열 매개 변수가 될 것입니다 알고 가정된다, 예컨대 param1, param2

$url_parsed = parse_url($url); 
$qry_parsed = array(); 
parse_str($url_parsed['query'], $qry_parsed); 
$encurl = "{$url_parsed['scheme']}{$url_parsed['host']}{$url_parsed['path']}?param1=" . urlencode($qry_parsed['param1']) . "&param2=" . urlencode($qry_parsed(['param2']) 

header("Location: $encurl"); 
exit(); 
관련 문제