[javascript] AJAX를 통해 “&”(앰퍼샌드) 문자를 어떻게 보낼 수 있습니까?

POSTJavaScript 의 메서드를 사용하여 몇 가지 변수와 문자열을 보내고 싶습니다 .

데이터베이스에서 문자열을 가져온 다음 PHP 페이지로 보냅니다. 나는 XMLHttpRequest물체를 사용하고있다 .

문제는 문자열에 문자 &가 몇 번 포함되어 있고 $_POSTPHP 의 배열이 여러 키처럼 인식한다는 것입니다.

나는 교체 시도 &\&replace()기능,하지만 아무것도하지 않는 것.

누구든지 도울 수 있습니까?

자바 스크립트 코드와 문자열은 다음과 같습니다.

var wysiwyg = dijit.byId("wysiwyg").get("value");
var wysiwyg_clean = wysiwyg.replace('&','\&');

var poststr = "act=save";

poststr+="&titlu="+frm.value.titlu;
poststr+="&sectiune="+frm.value.sectiune;
poststr+="&wysiwyg="+wysiwyg_clean;
poststr+="&id_text="+frm.value.id_text;

xmlhttp.open("POST","lista_ajax.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send(poststr);

문자열은 다음과 같습니다.

 <span class="style2">&quot;Busola&quot;</span>



답변

encodeURIComponent () 사용할 수 있습니다 .

URL에서 그대로 나타날 수없는 모든 문자를 이스케이프합니다.

var wysiwyg_clean = encodeURIComponent(wysiwyg);

이 예에서 앰퍼샌드 문자 &%26URL에서 유효한 이스케이프 시퀀스로 대체됩니다 .


답변

encodeURIComponent () 를 사용할 수 있습니다 .

encodeURIComponent("&quot;Busola&quot;"); // => %26quot%3BBusola%26quot%3B


답변

앰퍼샌드를 URL 이스케이프해야합니다. 사용하다:

var wysiwyg_clean = wysiwyg.replace('&', '%26');

Wolfram이 지적했듯이 이것은 encodeURIComponent에 의해 (다른 모든 특수 문자와 함께) 멋지게 처리됩니다.


답변

Ramil Amr의 답변은 & 캐릭터에만 적용됩니다. 다른 특수 문자가있는 경우 PHP htmlspecialchars() JS의 encodeURIComponent().

당신은 쓸 수 있습니다:

var wysiwyg_clean = encodeURIComponent(wysiwyg);

그리고 서버 측에서 :

htmlspecialchars($_POST['wysiwyg']);

이렇게하면 AJAX가 예상대로 데이터를 전달하고 PHP (데이터를 데이터베이스에 삽입하는 경우)가 데이터가 예상대로 작동하는지 확인합니다.


답변

이 encodeURIComponent 함수를 사용하여 인수를 전달할 수 있으므로 특수 문자 전달에 대해 걱정할 필요가 없습니다.

data: "param1=getAccNos&param2="+encodeURIComponent('Dolce & Gabbana')

또는

var someValue = 'Dolce & Gabbana';
data: "param1=getAccNos&param2="+encodeURIComponent(someValue)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent


답변

JavaScript 측에서 Base64 인코딩을 사용하여 문자열을 인코딩 한 다음 PHP (?)를 사용하여 서버 측에서 디코딩 할 수 있습니다.

JavaScript ( Docu )

var wysiwyg_clean = window.btoa( wysiwyg );

PHP ( Docu ) :

var wysiwyg = base64_decode( $_POST['wysiwyg'] );


답변

선호하는 방법은 jQuery와 같은 JavaScript 라이브러리를 사용하고 데이터 옵션을 객체로 설정 한 다음 jQuery가 다음과 같이 인코딩하도록하는 것입니다.

$.ajax({
  type: "POST",
  url: "/link.json",
  data: { value: poststr },
  error: function(){ alert('some error occured'); }
});

jQuery (요즘 거의 표준)를 사용할 수 없다면 encodeURIComponent를 사용 하세요.