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


91

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>

답변:


171

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

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

var wysiwyg_clean = encodeURIComponent(wysiwyg);

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


데이터를 안전하게 이스케이프하기에 충분합니까, 아니면 앰퍼샌드 문제를 피할 수있을만큼 "단지"입니까?
Wottensprels 2014 년

@Sprottenwels, 모든 데이터를 올바르게 인코딩하는 것으로 충분합니다. 이 문맥에서 "안전하게"란 무엇을 의미합니까?
Frédéric Hamidi 2014 년


9

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

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

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


4

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

당신은 쓸 수 있습니다:

var wysiwyg_clean = encodeURIComponent(wysiwyg);

그리고 서버 측에서 :

htmlspecialchars($_POST['wysiwyg']);

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



1

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

JavaScript ( Docu )

var wysiwyg_clean = window.btoa( wysiwyg );

PHP ( Docu ) :

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

1

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

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

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


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.