Как я могу отправить символ " & " (амперсанд) через AJAX?



Я хочу отправить несколько переменных и строку с методом POST из JavaScript. Я получаю строку из базы данных, а затем отправляю ее на страницу PHP. Я использую объект XMLHttpRequest.
Проблема в том, что строка содержит символ "&" несколько раз, а массив $_POST в PHP видит его как несколько ключей.
Я попытался заменить " & " на " & " С помощью функции replace (), но, похоже, ничего не делает.
Кто-нибудь может помочь?



код javascript и строка выглядит так это:



    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>
681   8  

8 ответов:

можно использовать encodeURIComponent().

он будет экранировать все символы, которые не могут произойти дословно В url:

var wysiwyg_clean = encodeURIComponent(wysiwyg);

В этом примере знак & будет заменен escape-последовательностью %26, который действителен в URL.

вы можете использовать encodeURIComponent().

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

вам нужно url-escape амперсанд. Использование:

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

Как указывает Вольфрам, это хорошо обрабатывается (наряду со всеми другими специальными символами) encodeURIComponent.

ответ Рамиля Амра работает только для символа&. Если у вас есть другие специальные символы, вы должны использовать PHP htmlspecialchars()и в JS это encodeURIComponent().

вы можете написать:

var wysiwyg_clean = encodeURIComponent(wysiwyg);

и на стороне сервера:

htmlspecialchars($_POST['wysiwyg']);

Это позволит убедиться, что AJAX будет передавать данные, как ожидалось, и что PHP (в случае, если your'e insreting данные в базу данных) будет убедиться, что данные работают, как ожидалось.

предпочтительный способ-использовать библиотеку JavaScript, такую как jQuery, и установить параметр data в качестве объекта, а затем позволить jQuery выполнить кодировку, например:

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

Если вы не можете использовать jQuery (который в значительной степени является стандартным в эти дни), используйте encodeURIComponent.

вы можете кодировать свою строку, используя кодировку Base64 на стороне JavaScript, а затем декодировать ее на стороне сервера с помощью PHP (?).

JavaScript (Docu)

var wysiwyg_clean = window.btoa( wysiwyg );

PHP (Docu):

var wysiwyg = base64_decode( $_POST['wysiwyg'] );
encodeURIComponent(Your text here);

это приведет к усечению специальных символов.

вы можете передать свои аргументы с помощью этой функции 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

Comments

    Ничего не найдено.