У меня есть простая форма, которая генерирует новую фотогалерею, отправляя заголовок и описание к MySQL и перенаправляя пользователя к странице, где они могут загрузить фотографии.
Все хорошо работало, пока амперсанд не ввел уравнение. Информация отправляется от jQuery модальное диалоговое окно к странице PHP, которая затем отправляет запись в базу данных. После того, как Ajax завершается успешно, пользователь отправляется в страницу загрузки с ПОЛУЧИТЬ URL для сообщения страницы, какой альбом это загружает на-
$.ajax ({
type: "POST",
url: "../../includes/forms/add_gallery.php",
data: $("#addGallery form").serialize(),
success: function() {
$("#addGallery").dialog('close');
window.location.href = 'display_album.php?album=' + title;
}
});
Если заголовок имеет амперсанд, поле Title на странице загрузки не отображается правильно. Существует ли способ выйти из амперсанда для, ДОБИРАЮТСЯ?
Спасибо
Как правило, вы захотите URL-кодировать все, что не является полностью буквенно-цифровым, когда вы передаете их как части ваших URL-адресов. .
В кодировке URL &
заменяется на % 26
(поскольку 0x26 = 38 = код ASCII &
).
Чтобы сделать это в Javascript, вы можете использовать функцию encodeURIComponent
:
$.ajax ({
type: "POST",
url: "../../includes/forms/add_gallery.php",
data: $("#addGallery form").serialize(),
success: function() {
$("#addGallery").dialog('close');
window.location.href = 'display_album.php?album=' + encodeURIComponent(title);
}
});
Обратите внимание, что escape
имеет тот недостаток, что +
не кодируется, и будет декодироваться на стороне сервера как пробел, поэтому его следует избегать ( источник ).
Если вы хотите сделать это на стороне сервера на уровне PHP, вам необходимо использовать функцию urlencode
.
window.location.href = 'display_album.php?album=' + encodeURIComponent(title);
Функция javascript escape
не кодирует эти символы: * @ - _ + . /. Поэтому если у вас есть заголовок типа "this+that", знак плюс будет интерпретирован как пробел, и PHP получит переменную как "this that".
Использование encodeURIComponent
также кодирует следующие символы: , / ? : @ & = + $ #