2011-11-18 4 views
3

클라이언트 쪽에서는 JavaScript + JQuery를 사용하고 서버 쪽에서는 PHP를 사용하는 웹 응용 프로그램을 개발하고 있습니다.

AJAX 요청의 매개 변수로 전달하려는 문자열 중 하나에 내용이 '&'이 있습니다.

이러한 이유로 요청 문자열이 손상되었습니다. 문자열에 '&'이 있기 때문에 브라우저는이 매개 변수가 끝났다고 생각합니다. 로

var hasChar = "This is a string that has a & in the content."; 
var doesntHave = "This one does not contain."; 
var dataString = "first=" + hasChar + "&second=" + doesntHave; 

$.ajax({ 
    type : "POST", 
    url : "myurl.php", 
    data : dataString, 
    cache : false, 
    success : function(html) { 
    } 
}); 

서버는 첫 번째 매개 변수를 수신 "이이 문자열 인"

내 질문 :

가 어떻게 클라이언트 측에서 문자열을 인코딩하고 내가 그것을 어떻게 디코딩한다 PHP 서버에서.

답변

7

왜 다음을 수행 할 수 없습니다를 해당 문자열은 올바르게 인코딩됩니다. 당신이)에 encodeURIComponent를 (사용할 수있는 대안으로

JS의 적절하게 인코딩 문자열 기능 내장 :

var dataString = "first=" + encodeURIComponent(hasChar) + "&second=" + encodeURIComponent(doesntHave); 
5

.param을 사용할 수 있습니다.

dataString = $.param({first: asChar, second: doesntHave}); 
8

jQuery를 당신을위한 hasChar의 인코딩 (와 다른 PARAMS) 처리하자 : jQuery를 확인한다이 경우

$.ajax({ 
     type : "POST", 
     url : "myurl.php", 
     data : { 
      'first': hasChar, 
      'second': doesntHave 
     }, 
     cache : false, 
     success : function(html) { 
     } 
    }); 

:

var hasChar = "This is a string that has a & in the content."; 
var doesntHave = "This one does not contain."; 

$.ajax({ 
    type : "POST", 
    url : "myurl.php", 
    data : { first: hasChar, second: doesntHave }, 
    cache : false, 
    success : function(html) { 
    } 
}); 
1

하거나 $.param 부분을 건너 뛰려면 @ 알렉스-K에 의해 metioned로

data : {'first': hasChar, 'second': doesntHave}, 
0

서버 쪽 de/encoding을 사용하려면 urlencode()urldecode()을 사용하십시오.

+0

이 정말 질문에 대한 답변하지 않습니다. – kapa

+0

@bazmegakapa : 질문이 편집되었습니다. "_server_ 측면에 문자열을 인코딩하는 방법 ..."이 원래의 질문이었습니다. –

+0

오타되었습니다 ... – kapa

1

당신은 객체로 설정할 수 있습니다

var hasChar = "This is a string that has a & in the content."; 
var doesntHave = "This one does not contain."; 

$.ajax({ 
    type : "POST", 
    url : "myurl.php", 
    data : {first: hasChar, second: doesntHave}, 
    cache : false, 
    success : function(html) { 
    } 
}); 
0

이이

var dataString = {}; 
dataString["hasChar"] = "This is a string that has a & in the content."; 
dataString["doesntHave"] = "This one does not contain."; 

$.ajax({ 
    type : "POST", 
    url : "myurl.php", 
    data : dataString, 
    cache : false, 
    success : function(html) { 
    } 
}); 
1

또한 사용할 수 있습니다 시도 encodeURI :

var encodedData = encodeURI(dataString); 
$.ajax({ 
    type : "POST", 
    url : "myurl.php", 
    data : encodedData, 
    cache : false, 
    success : function(html) { 
    } 
}); 

Link

0

매개 변수는 URL 인코딩 만하면됩니다. PHP 쪽에서는 디코드 할 필요가 없으며 모든 것이 정상적으로 작동합니다.

문자열을 올바르게 URL 인코딩 할 encodeURIComponent()이라는 Javascript 함수가 있습니다.그래서 기본적인 수준에, 당신은이 작업을 수행 할 수 있습니다

var dataString = "first=" + encodeURIComponent(hasChar) + "&second=" + encodeURIComponent(doesntHave); 

당신이 jQuery를 사용하는 경우 in your $.ajax() call you pass it an object instead of a query string 경우, 자동으로 당신을 위해이 문제를 해결할 것입니다

데이터 옵션의 쿼리 문자열 중 하나를 포함 할 수 있습니다 key1 = value1 & key2 = value2 또는 {key1 : 'value1', key2 : 'value2'} 형식의 맵입니다. 후자의 형식이 사용되면 데이터는 전송되기 전에 jQuery.param()을 사용하여 쿼리 문자열로 변환됩니다.

그래서 당신은 당신의 코드에서이 작업을 수행해야한다 :

var dataString = { first: hasChar, second: doesntHave);