이 기사의 예에서는 JQuery의 중국어 우편 전송 문제, 즉 왜곡된 ajax와 jquery.ajax 중국어 매개변수 사후 전송 왜곡 처리 방법에 대한 해결 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 분석은 다음과 같습니다.
질문 1:
오늘 프로젝트 작업을 할 때 Ajax를 사용해야 했는데, GET을 사용하여 중국어 매개변수를 전달할 때 백그라운드 프로그램에서 페이지 인코딩을 GB2312로 설정해야만 중국어가 정상적으로 표시될 수 있었습니다. , 이번에는 양식 항목이 많아서 GET 방식으로 전달하기에는 적합하지 않고 POST 방식으로만 전송할 수 있습니다. 그러나 백그라운드 프로그램에서 인코딩을 GB2312로 설정하면 중국어가 발생하는 것으로 나타났습니다. 문자가 여전히 잘못된 문자로 표시됩니다. 약간의 연구 끝에 문제가 마침내 해결되었습니다.
해결책:
이 문제를 해결하는 방법은 매우 간단합니다. JS에서 매개변수를 처리할 때 escape() 함수만 사용하면 되며, 디코딩을 위해 unescape()를 사용할 필요가 없습니다. 이 방법은 POST 및 GET에 적합합니다. 특정 Ajax 코드 여기서는 예제를 제공하지 않지만 매개변수를 처리하기 위해 escape() 함수를 사용하는 코드는 다음과 같습니다.
보통 Ajax를 처리할 때 여기서 매개변수 값을 직접 구하게 되는데, 중국어 매개변수가 왜곡되지 않도록 하려면 escape() 함수만 사용하여 매개변수를 처리하면 됩니다.
질문 2:
웹사이트 페이지가 utf-8로 인코딩되지 않으면 ajax로 제출된 중국어가 깨져 보입니다.
해결 방법은 다음과 같습니다.
jquery.js에서 contentType:application/x-www-form-urlencoded를 찾아 contentType:application/x-www-form-urlencoded=charset=UTF-8로 변경합니다.
원인: charset을 지정하지 않으면 jquery는 일반적으로 Latin-1이라고 하는 ISO-8859-1, ISO8859-1을 사용합니다. Latin-1에는 모든 서유럽 언어를 작성하는 데 필수적인 추가 문자가 포함되어 있습니다. jquery의 ajax는 국제화 문제를 전혀 고려하지 않고 유럽 문자셋을 사용하기 때문에 중국어 전송 시 문자가 깨져 나오는 현상이 나타납니다
저는 오래 전부터 Prototype 프레임워크를 사용해 왔습니다. .net-GB2312 또는 jsp tutorial-utf8에서 사용했는데 문자 인코딩 문제가 발생한 적이 없습니다. 그래서 Prototype과 JQuery 코드를 모두 다운로드하고 열어서 이유를 연구했습니다.
차이점은 JQuery의 기본 contentType이 application/x-www-form-urlencoded라는 점입니다
프로토타입은 contentType:application/x-www-form-urlencoded입니다. charset=UTF-8
JQuery가 문자셋을 지정하지 않으면 ISO-8859-1이 사용되는 이유가 바로 이것이다
ISO8859-1, 일반적으로 Latin-1이라고 합니다. Latin-1에는 모든 서유럽 언어를 작성하는 데 필수적인 추가 문자가 포함되어 있습니다.
JQuery의 Ajax는 국제화 문제를 전혀 고려하지 않고 유럽 문자셋을 사용했기 때문에 중국어 전송 시 글자가 깨져버리는 문제가 발생했습니다.
우리 UTF-8은 이 문제를 해결할 수 있습니다.
결국은 JQuery 코드를 수정하고 contentType이 utf-8 문자 집합을 사용함을 명시적으로 선언해야 GB2312 중국어 전송 문제를 해결할 수 있다는 의미입니다.
JQuery 코드를 수정하고 charset=UTF-8만 추가하면 됩니다. 이렇게 하면 web.config를 변경하거나 페이지의 인코딩을 변경할 필요가 없으며 escapc를 사용할 필요도 없습니다. (str)은 서버 측에서 디코딩됩니다. 영어로 전달되는 방식은 중국어로도 전달됩니다.
테스트할 간단한 코드는 다음과 같습니다.
test.html 페이지 코드: