2012-04-16 2 views
1

PHP로 작성된 AJAX의 POST 요청을 cURL로 모방하려고합니다.작은 따옴표 JS encodeuri 대 PHP rawurlencode

내가 알아챈 한 가지는, 왜 PHP는 작은 따옴표를 %27으로 이스케이프 처리하지만 JS의 encodeuricomponent는 그대로 두는가?

PHP에는 실제로 JS와 동일한 기능이 있습니까?

+0

왜 배열을 만들고'http_build_query()'를 사용하지 않는가? – Brad

+0

여전히 % 27 않습니다. –

답변

1

작은 따옴표를 인코딩하지 않는 PHP 함수를 찾을 수 없습니다. 이유는 PHP는 작은 따옴표가 포함 된 RFC 3986에보다 엄격하게 부합합니다.

RFC 3986!, ', (,), and *과 같은 특수 문자를 예약합니다.

의 URI는 "예약"세트에
문자로 구분되는 구성 요소 및 하위 구성 요소를 포함한다. 이러한 문자는
그들이 할 수 있기 때문에 "예약"(또는하지 않을 수 있습니다) 각 제도 별 구문에 의해,
일반 구문에 의해 구분 기호로 정의 할, 또는 URI의 역 참조 알고리즘의
구현 고유의 구문에 의해 호출된다.
URI 구성 요소의 데이터가 예약 된
문자의 구분 기호와 충돌하는 경우 URI가 형성되기 전에 충돌하는 데이터가 퍼센트 인코딩되어야합니다.

예약 = 발전기 delims/서브 delims

발전기의 delims = ":", "?"/ "/"//"#"/ "["/ "]"/ "@"

sub-delims = "!"/"$"/ "&"/ " '/"("/") " /"* "/"+ "/", "/"; "/"="

PHP와 일치시키고 작은 따옴표를 js로 인코딩하려면 다음과 같은 기능을 사용할 수 있습니다.

function fixedEncodeURIComponent (str) { 
    return encodeURIComponent(str).replace(/[!'()*]/g, escape); 
} 

왜 인코딩하지 않아도됩니까? 그것은 여전히 ​​CURL과 함께 작동해야합니다.