Как я могу отправить символ " & " (амперсанд) через 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>
8 ответов
можно использовать encodeURIComponent().
он будет избегать всех символов, которые не могут происходить дословно в URLs:
var wysiwyg_clean = encodeURIComponent(wysiwyg);
В этом примере знак &
будет заменен escape-последовательностью %26
, который действителен в URL.
вы можете использовать encodeURIComponent().
encodeURIComponent(""Busola""); // => %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, и установка опции данных в качестве объекта, а затем пусть jQuery выполняет кодировку, например:
$.ajax({
type: "POST",
url: "/link.json",
data: { value: poststr },
error: function(){ alert('some error occured'); }
});
Если вы не можете использовать jQuery (который в значительной степени стандарт в эти дни), используйте encodeURIComponent.
вы можете передать свои аргументы, используя эту функцию 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