>  기사  >  웹 프론트엔드  >  JavaScript가 왜곡된 코드

JavaScript가 왜곡된 코드

高洛峰
高洛峰원래의
2016-11-26 14:48:241213검색

JavaScript의 매개변수 인코딩:


JavaScript 코드는 한 번만 인코딩됩니다.
1.url=encodeURI(url) //참고: encodeURI()의 매개변수는 다음을 포함한 전체 URL입니다. 요청 주소 및 매개변수


서버 측에서 매개변수를 가져온 다음 이를 트랜스코딩합니다.


Java 코드 한 번 트랜스코딩
1.String linename = new String(request .getParameter("name ").getBytes("ISO-8859-1"),"UTF-8");


또는:

두 번 인코딩된 JavaScript 코드
1.url= encodeURI(encodeURI(url)); //encodeURI를 두 번 사용


서버 측 획득:


Java 코드 디코드 한 번
1.String linename = 요청 .getParameter(name);
2.//java : 문자 디코딩
3.linename = java.net.URLDecoder.decode(linename, "UTF-8")


추신: 프런트엔드와 백엔드 간에 데이터를 교환할 때는 JSONObject를 사용하여 데이터를 캡슐화하는 것이 가장 좋습니다.

테스트
서버: WebLogic10.x
브라우저: IE9.0
테스트 1:
프런트엔드 JavaScript
//여기에서 확장하세요. util.JSON.encode는 JSONObject를 JSON 문자열로 변환하는 것입니다. 이는 encodeURI
//fileUpload의 의미와 다릅니다(caseEndReport가 true로 설정된 경우
var caseEndReportTab = Ext.util.JSON.encode(caseEndReport). .getForm ().GetValues ​​​​(FALSE));
CASEENDRETFORM (). 제출 ({
URL: 'PaycaseManage.do? Oper = SaveCasendreporta = '+CASEENDREPORTTTAB,
성공: FUNCTION 액션){
                                                                                                              실패: function(){
, '정보 저장 실패, 작업 권한이 없습니다!') = JSONObject.fromObject(caseEndReportTab);//JSON 문자열을 JSON 개체로 변환
System.out.println(accreditationJson.toString());


컨트롤러에 추가된 경우
response.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF- 8");
response.setContentType("application/x-json");
위 코드 출력은 횡설수설이 아닙니다.



response.setCharacterEncoding("UTF-8");//추가하지 않는 경우 request.setCharacterEncoding("UTF-8");
response.setContentType(( "application/x-json");
위 코드는 중국어 왜곡 문자를 출력합니다.
JSONObject caseEndReportJson = JSONObject.fromObject(caseEndReportTab);

JSONObject caseEndReportJson = JSONObject.fromObject로 변경해야 합니다. (new String(caseEndReportTab.getBytes("ISO8859_1"),"UTF-8"));
이 올바르게 출력됩니다.


테스트 2:
Front JavaScript
// queryForm의 fileUpload가 false로 설정되고 쿼리는 JSON 문자열이며 중국어
//Ext.util.JSON을 포함합니다. encode는 단지 JSONObject를 JSON 문자열로 변환하는데, 이는 encodeURI
var query = Ext.util.JSON.encode(queryForm.getForm().getValues(false));

caseStore.proxy의 의미와 다릅니다. = new Ext.data.HttpProxy({url:"payCaseManage.do?oper=listCase&query="+query});



백엔드 Java 코드
response.setCharacterEncoding("UTF-8" ) ;
request.setCharacterEncoding("UTF-8");
response.setContentType("application/x-json");
String query = request.getParameter("query");

//또는 문자열 쿼리 = new String(request.getParameter("query").getBytes("ISO8859_1"),"UTF-8");

JSONObject queryObject = JSONObject.fromObject(query);
문자열 카운티 = queryObject.getString("county");
String city = queryObject.getString("city");
System.out.println(city+county);
모든 출력 중국어 왜곡 문자


테스트 3:
프런트엔드 JavaScript
//URL에 대한 프런트엔드 encodeURI가 두 번이고 쿼리 문자열에 중국어 콘텐츠가 포함되어 있습니다
var query = Ext.util.JSON. encode(queryForm.getForm ().getValues(false));
var url = "payCaseManage.do?oper=listCase&query="+query;
var dataUrl = encodeURI(encodeURI(url));
caseStore.proxy = new Ext.data.HttpProxy({url:dataUrl});
//백엔드 Java는 request.getParameter(" query ")에 대해 java.net.URLDecoder.decode를 한 번
response.setCharacterEncoding( "UTF-8" );
request.setCharacterEncoding("UTF-8");
response.setContentType("application/x-json");
문자열 쿼리 = java.net.URLDecoder.decode (request.getParameter( "query"),"UTF-8");
JSONObject queryObject = JSONObject.fromObject(query);
String county = queryObject.getString("county");
String city = queryObject.getString( "city");
System.out.println(city+county);
결과 출력이 중국어로 정확함


테스트 4:
앞면 -end JavaScript
//url 2개의 encodeURI, caseRootId에 중국어 콘텐츠가 포함됨
caseTreeLoaderDataUrl = 'payCaseManage.do?oper=treeLoad&nodeId=' + node.id+'&text='+node.text+'&caseRootId='+caseRootId ;
caseTree.loader.dataUrl = encodeURI(encodeURI(caseTreeLoaderDataUrl));
백그라운드 Java
response.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF-8") ;
response.setContentType( "application/x-json");
//request.getParameter("caseRootId")에서 java.net.URLDecoder.decode를 한 번 수행
String caseRootId = java.net. URLDecoder.decode(request.getParameter( "caseRootId"),"UTF-8");
System.out.println(caseRootId);
결과 출력은 중국어로 정확합니다


테스트 5:
프런트엔드 JavaScript
//URL을 인코딩하지 마세요.URI. 시와 카운티 모두 중국어 콘텐츠를 포함합니다
var city = queryForm.getForm().findField("city").getValue();
var county = queryForm.getForm().findField("county").getValue ();
caseStore.proxy = new Ext.data.HttpProxy({url:"payCaseManage.do?oper=listCase&city="+city+"&county="+county"});
백엔드 Jave 코드
//request.getParameter()를 처리하기 위해 java.net.URLDecoder.decode를 사용하지 마십시오
response.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF-8");
response.setContentType("application/x-json");
String county = request.getParameter("county");
String city = request.getParameter("city");
System.out .println(city+county);
한자 깨짐 문자 출력


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.