У меня есть простая форма, которая генерирует новую фотогалерею, отправляет название и описание в 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 также кодирует следующие символы:, /? : @ & = + $ #