PHP로 작성된 AJAX의 POST 요청을 cURL로 모방하려고합니다.작은 따옴표 JS encodeuri 대 PHP rawurlencode
내가 알아챈 한 가지는, 왜 PHP는 작은 따옴표를 %27
으로 이스케이프 처리하지만 JS의 encodeuricomponent는 그대로 두는가?
PHP에는 실제로 JS와 동일한 기능이 있습니까?
PHP로 작성된 AJAX의 POST 요청을 cURL로 모방하려고합니다.작은 따옴표 JS encodeuri 대 PHP rawurlencode
내가 알아챈 한 가지는, 왜 PHP는 작은 따옴표를 %27
으로 이스케이프 처리하지만 JS의 encodeuricomponent는 그대로 두는가?
PHP에는 실제로 JS와 동일한 기능이 있습니까?
작은 따옴표를 인코딩하지 않는 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과 함께 작동해야합니다.
왜 배열을 만들고'http_build_query()'를 사용하지 않는가? – Brad
여전히 % 27 않습니다. –