programing

부호화되지 않는 이유단일 따옴표/부호를 인코딩하는 URIC 컴포넌트

javamemo 2023. 3. 31. 21:20
반응형

부호화되지 않는 이유단일 따옴표/부호를 인코딩하는 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);  
}

자세한 내용은 MDN에서 확인할 수 있습니다.

갱신:

당신의 질문에 대답하기 위해, 왜?'그리고 위에 언급된 다른 문자는 인코딩에 의해 인코딩되지 않습니다.즉, URIComponent는 특정 URI 스킴으로 부호화만 하면 되며 부호화 결정은 사용 중인 스킴에 따라 달라집니다.

RFC 3986을 인용하려면:

응용 프로그램을 생성하는 URI는 의 문자에 대응하는 데이터 옥텟을 퍼센트로 인코딩해야 합니다.reserved setURI 스킴에서 해당 컴포넌트 내의 데이터를 나타내는 것을 명시적으로 허가하지 않는 한.예약된 문자가 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

반응형