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

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

6 голосов
/ 01 мая 2010

У меня есть простая форма, которая генерирует новую фотогалерею, отправляя заголовок и описание в MySQL и перенаправляя пользователя на страницу, где они могут загружать фотографии.

Все работало нормально, пока амперсанд не вошел в уравнение. Информация отправляется из модального диалога jQuery на страницу PHP, которая затем отправляет запись в базу данных. После успешного завершения Ajax пользователь отправляется на страницу загрузки с GET 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;
    }
});

Если заголовок имеет амперсанд, поле «Заголовок» на странице загрузки не отображается должным образом. Есть ли способ избежать амперсанда для GET?

Спасибо

Ответы [ 2 ]

13 голосов
/ 01 мая 2010

Как правило, вам нужно кодировать 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 имеет недостаток, заключающийся в том, что + не кодируется и будет декодироваться на стороне сервера как пробел, поэтому его следует избегать ( source ).

Если вы хотите сделать это на стороне сервера на уровне PHP, вам нужно использовать функцию urlencode.

1 голос
/ 01 мая 2010
window.location.href = 'display_album.php?album=' + encodeURIComponent(title);

Функция javascript escape не будет кодировать следующие символы: * @ - _ +. /. Так что если у вас есть заголовок типа this + that, знак плюс будет интерпретирован как пробел, а PHP получит переменную как this

Использование encodeURIComponent также кодирует следующие символы:, /? : @ & = + $ #

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...