부호화되지 않는 이유단일 따옴표/부호를 인코딩하는 URIC 컴포넌트
excape() 함수는 폐지되어 인코딩으로 대체되었습니다.URIC 컴포넌트, 단 부호화URIC 구성 요소는 단일 따옴표/어포스트로피 문자를 인코딩하지 않습니다.AJAX 형식의 아포스트로피(예: 'O'Neill')를 피하기 위해 필요합니다.왜 개선하려는 능력을 제거했을까요?
편집:
문제를 보다 상세하게 설명하기 위한 코드 예를 다음에 제시하겠습니다.보시다시피 'O'Neill'에는 URL 내의 변수를 전달할 때 이스케이프해야 하는 아포스트로피가 포함되어 있습니다.그러나 이러한 현상은 예를 들어 입력된 주소가 '빌리즈 선술집'인 경우 양식의 다른 장소에서도 발생할 수 있습니다.
<input id='surname' value="O'Neill">
<script>
var get_url = '?surname='+encodeURIComponent($('#surname').val());
$.ajax({
url: get_url
});
</script>
커스텀 기능을 사용하는 현재의 솔루션.제 질문은 커스텀 기능이 왜 필요한지 묻는 것이었습니다.
<script>
function customEncodeURIComponent(URI) {
return encodeURIComponent(URI).replace(/'/g, "%27");
}
</script>
<input id='surname' value="O'Neill">
<script>
var get_url = '?surname='+customEncodeURIComponent($('#surname').val());
$.ajax({
url: get_url
});
</script>
encodeURIComponent
는 다음 문자를 제외한 모든 문자를 이스케이프합니다.
영숫자, 십진수, - _ .!~* ' ( )
RFC 3986과 호환되는 인코딩을 사용하는 경우(RFC 3986은!
,'
,(
,)
,그리고.*
)를 사용할 수 있습니다.
function rfc3986EncodeURIComponent (str) {
return encodeURIComponent(str).replace(/[!'()*]/g, escape);
}
갱신:
당신의 질문에 대답하기 위해, 왜?'
그리고 위에 언급된 다른 문자는 인코딩에 의해 인코딩되지 않습니다.즉, URIComponent는 특정 URI 스킴으로 부호화만 하면 되며 부호화 결정은 사용 중인 스킴에 따라 달라집니다.
RFC 3986을 인용하려면:
응용 프로그램을 생성하는 URI는 의 문자에 대응하는 데이터 옥텟을 퍼센트로 인코딩해야 합니다.
reserved set
URI 스킴에서 해당 컴포넌트 내의 데이터를 나타내는 것을 명시적으로 허가하지 않는 한.예약된 문자가 URI 컴포넌트에 있고 해당 문자의 구분 역할이 불분명한 경우 US-ASCII에서 해당 문자의 인코딩에 대응하는 데이터 옥텟을 나타내는 것으로 해석해야 합니다.
여기서 "예약 세트"는 다음과 같이 정의됩니다.
reserved = gen-delims / sub-delims
gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"
sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
/ "*" / "+" / "," / ";" / "="
아포스트로피는sub-delims
즉, 이러한 문자를 부호화하지 않은 상태로 두어야 합니다.특히, 예를 들면, 잘못 부호화한 경우 등, 소비하는 애플리케이션이 그 문자의 처리 방법을 알 수 있다고 확신하고 있는 경우는, 이러한 문자는 부호화되지 않은 채로 둘 필요가 있습니다.?
그리고.&
쿼리 부분을 더 이상 구분하지 않습니다.지금까지 다음과 같이 구분된 경로 세그먼트 파라미터에 대한 제안도 있었다.;
★★★★★★★★★★★★★★★★★」,
(대규모로 채택되지 않음)그래서 이 캐릭터들도 허용됩니다..unreserved
에서는 URI 를 들어 URI는 URI의 'URI의 'URI의 의미를 나타내다'입니다★★★★★★★★★★★★★★★★★,segment
삭제:
segment = *pchar
pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
이거 먹어봐
encodeURIComponent(str).replace(/'/g, "%27");
/char/g
을 바꾸도록 JavaScript에 합니다.
최신 답변(2021년)
JavaScript 사용:
console.log(new URLSearchParams({ surname: "O'Neill" }).toString())
// or
console.log(new URLSearchParams("surname=O'Neill").toString())
을 알았습니다."
★★★★★★★★★★★★★★★★★」\
그게 나한테 효과가 있었어
var replaceChars={ '\\':'\\\\' , '"':'\\"' };
encodeURIComponent(str.replace(/\\|"/gi, function(matched){
return replaceChars[matched];
})),
언급URL : https://stackoverflow.com/questions/18251399/why-doesnt-encodeuricomponent-encode-single-quotes-apostrophes
'programing' 카테고리의 다른 글
리액트 후크 방식으로 요청을 보내는 방법 (0) | 2023.03.31 |
---|---|
사양에서 JSON 데이터를 설명하는 방법은 무엇입니까? (0) | 2023.03.31 |
React의 useState 훅을 사용할 때 nullable 상태를 입력하는 올바른 방법 (0) | 2023.03.31 |
Spring Boot - Bean Definition Override예외:잘못된 콩 정의 (0) | 2023.03.31 |
jQuery Ajax 호출 및 HTML.위조 방지토큰() (0) | 2023.03.31 |