У меня есть простая форма, которая генерирует новую фотогалерею, отправляет название и описание в MySQL и перенаправляет пользователя на страницу, где они могут загружать фотографии.
Все работало нормально, пока амперсанд не вошел в уравнение. Информация отправляется из модального диалога jQuery на страницу PHP, которая затем отправляет запись в базу данных. После успешного завершения Ajax пользователь отправляется на страницу загрузки с URL-адресом GET, чтобы сообщить странице, к какому альбому она загружается,
$.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; } });
Если заголовок имеет амперсанд, поле «Название» на странице загрузки отображается неправильно. Есть ли способ избежать амперсанда для GET?
благодаря
В общем, вы захотите 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);
Функция escape
кода javascript не будет кодировать эти символы: * @ – _ +. /. Поэтому, если у вас есть заголовок как «this + that», знак плюса будет интерпретироваться как пробел, а PHP получит переменную как «это то».
Использование encodeURIComponent
также кодирует следующие символы:, /? : @ & = + $ #