У меня есть следующий код:
var artist = document.getElementById("txtBoxArtist").value;
Когда значение представляет собой обычный текст, например Biffy Clyro, artist = Biffy Clyro
Когда значение содержит &
, например, Mumford &
Sons, artist = Mumford
Я передаю значение исполнителя с помощью AJAX и восстанавливаю значение на другой php-странице следующим образом:
var data = "nameTitle=" + title + "&nameArtist=" + artist;
[...]
$nameArtist=$_POST['nameArtist'];
Почему это происходит и как его избежать? Это дает мне много проблем, это &
символ...
Спасибо вам всем!
Я думаю, вы можете кодировать valiables перед отправкой их следующим образом:
artist = encodeURIComponent(artist);
title = encodeURIComponent(title);
var data = "nameTitle=" + title + "&nameArtist=" + artist;
надеюсь это поможет.
encodeURIComponent()
является правильным.
Вам необходимо закодировать значения, прежде чем вставлять их в URL.
var data = "nameTitle=" + encodeURIComponent(title) + "&nameArtist=" + encodeURIComponent(artist);
Вы также должны это увидеть.
encodeURIComponent
) является правильным (не encodeURI
): обратите внимание, что кодировщик сама по себе encodeURI не может формировать правильные HTTP-запросы GET и POST , например, для XMLHTTPRequests, поскольку «&», «+» и «=» не кодируются , которые обрабатываются как специальные символы в запросах GET и POST. Однако encodeURIComponent кодирует эти символы. MDN
Некоторые символы являются специальными и нуждаются в "экранировании" для кодирования их значений - поскольку вы показываете, используя &
вместо &
.
Однако эти принципы убегания различны для содержимого HTML и URL/URI.
В URI &
экранируется как %26
а не как &
- поэтому вы должны либо использовать это, либо соответствующие функции кодирования/декодирования, а не кодирование/декодирование объекта HTML.
textarea
вместоinput