Как я могу отправить символ "&" (амперсанд) через 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+="§iune="+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">"Busola"</span>
Ответы
Ответ 1
Вы можете использовать encodeURIComponent().
Это приведет к тому, что все символы, которые не могут отображаться в URL-адресах, не будут:
var wysiwyg_clean = encodeURIComponent(wysiwyg);
В этом примере символ амперсанда &
будет заменен escape-последовательностью %26
, которая действительна в URL-адресах.
Ответ 2
Возможно, вы захотите использовать encodeURIComponent().
encodeURIComponent(""Busola""); // => %26quot%3BBusola%26quot%3B
Ответ 3
Вам нужно указать URL-адрес амперсанда. Использование:
var wysiwyg_clean = wysiwyg.replace('&', '%26');
Как указывает Вольфрам, это красиво обрабатывается (наряду со всеми другими специальными символами) с помощью encodeURIComponent.
Ответ 4
Ответ Рамиля Амра работает только для персонажа. Если у вас есть другие специальные символы, вы должны использовать PHP htmlspecialchars()
и JS encodeURIComponent()
.
Вы можете написать:
var wysiwyg_clean = encodeURIComponent(wysiwyg);
И на стороне сервера:
htmlspecialchars($_POST['wysiwyg']);
Это гарантирует, что AJAX передаст данные, как ожидалось, и что PHP (в случае, если вы будете инсталлировать данные в базу данных), убедитесь, что данные работают так, как ожидалось.
Ответ 5
Предпочтительный способ - использовать библиотеку JavaScript, такую как jQuery, и задать опцию данных в качестве объекта, а затем позволить jQuery делать кодировку, например:
$.ajax({
type: "POST",
url: "/link.json",
data: { value: poststr },
error: function(){ alert('some error occured'); }
});
Если вы не можете использовать jQuery (который в настоящее время является стандартным в наши дни), используйте encodeURIComponent.
Ответ 6
Вы можете кодировать свою строку с использованием кодировки Base64 на стороне JavaScript, а затем декодировать ее на стороне сервера с помощью PHP (?).
JavaScript (Docu)
var wysiwyg_clean = window.btoa( wysiwyg );
PHP (Docu):
var wysiwyg = base64_decode( $_POST['wysiwyg'] );
Ответ 7
encodeURIComponent(Your text here);
Это урезает специальные символы.
Ответ 8
Вы можете передавать свои аргументы с помощью этой функции encodeURIComponent, чтобы вам не приходилось беспокоиться о передаче каких-либо специальных символов.
data: "param1=getAccNos¶m2="+encodeURIComponent('Dolce & Gabbana')
ИЛИ
var someValue = 'Dolce & Gabbana';
data: "param1=getAccNos¶m2="+encodeURIComponent(someValue)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent