Амперсанд в GET, PHP

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