2013-05-18 4 views
119

앰퍼샌드가 포함 된 문자열이 포함 된 GET 메시지를 보내려고하는데 URL의 앰퍼샌드를 이스케이프 처리 할 수 ​​없습니다.URL에서 앰퍼샌드를 이스케이프 처리

예 : 나는 또한 시도

http://www.example.com?candy_name=M&M 
result => candy_name = M 

: 내가 수동으로 URL을 사용하고

http://www.example.com?candy_name=M\&M 
result => candy_name = M\\ 

그래서 난 그냥 올바른 문자가 필요합니다.

라이브러리를 사용할 수 없습니다. 어떻게 할 수 있습니까?

http://www.mysite.com?candy_name=M%26M 

답변

219

그들은 %를 인코딩 할 필요가있다.

또한이 referencewikipedia에 좀 더 많은 정보를 참조하십시오.

+1

: - % 26이 (가) 나를 위해 작동하지 않습니다. 다른 해결책이 있습니까? – Sanjiv

+0

@ Sanjiv : "일하지 않는다"는 것은 무엇을 의미합니까? – Blender

+1

&를 % 26으로 바꿀 때, 여전히 동일한 오류를 표시합니다.'클라이언트 (&)에서 잠재적으로 위험한 Request.Path 값이 감지되었습니다. ' – Sanjiv

5

http://www.mysite.com?candy_name=M%26M를 사용해보십시오 : 같은

> encodeURIComponent('&') 
"%26" 

그래서 귀하의 경우, URL이 보일 것이다

2

URL에 허용되지 않는 '이스케이프'문자에는 % 문자를 사용할 수 있습니다. RFC1738을 참조하십시오.

ASCII 값의 표는 여기에 있습니다 : http://www.asciitable.com/

당신은 & 16 진수 26입니다 볼 수 있습니다 - 그래서 당신이 필요 M의 %의 26M

27

이것은 URL 만에 앰퍼샌드에 적용되지 않습니다이다 , 모두 reserved characters. 그 중 일부는 포함

# $ & + ,/: ; = ? @ [ ] 

아이디어는 HTML 문서에 &를 인코딩과 동일하지만, 컨텍스트는 HTML 문서 내에 존재 이외에 URI 내에있는 것으로 변경되었다. 따라서 백분율 인코딩은 두 컨텍스트 내부의 구문 분석 문제를 방지합니다.

다른 URL에 URL을 넣어야 할 때 유용합니다. 트위터에 상태를 게시 할 경우 예를 들어, 내 트윗, 즉 ?'():/에서 예약 된 문자의

http://www.twitter.com/intent/tweet?status=What%27s%20up%2C%20StackOverflow%3F(http%3A%2F%2Fwww.stackoverflow.com) 

있다 많이, 그래서 status URL 매개 변수의 전체 값을 인코딩. 또한 메시지 본문이나 제목이있는 mailto: 링크를 사용할 때 유용합니다. 줄 바꿈, 앰퍼샌드 등을 그대로 유지하려면 bodysubject 매개 변수를 인코딩해야하기 때문입니다.

예약 된 세트에서 문자의 (a "예약 문자") 특정 상황에서 특별한 의미의 (a "예약 목적")을 가지고 있으며, URI 방식이 그 문자를 사용할 필요가 있다고 할 때 일부 다른 목적의 경우 문자는 백분율로 인코딩되어야합니다.백분율 인코딩 예약 된 문자는 해당 문자를 ASCII의 해당 바이트 값으로 변환 한 다음이 값을 16 진수 쌍으로 나타내는 것입니다. 이스케이프 문자로 사용되는 백분율 기호 ("%") 앞에 오는 숫자는 예약 문자 대신 URI에서 사용됩니다. 비 ASCII 문자의 경우 일반적으로 이 UTF-8로 바이트 시퀀스로 변환 된 다음 각 바이트의 값이 위와 같이 표시됩니다. 의 경우 예약 된 문자 "/"는 " 경로 "구성 요소는 경로 세그먼트 사이의 구분자라는 의미 인 을가집니다. 주어진 URI 체계에 따라 "/"가 경로 세그먼트에 있어야 할 경우 "/"대신 세그먼트에 "% 2F"또는 "% 2f"세 문자를 사용해야합니다.

http://en.wikipedia.org/wiki/Percent-encoding#Percent-encoding_reserved_characters

+2

위의 목록 중에서 '! '() *'는'encodeURIComponent '를 사용하여 URL로 인코딩되지 않습니다. –

0
// this may help if someone want by php 
$variable ="candy_name=M&M"; 
$variable = str_replace("&","%26",$variable); 
관련 문제