Амперсанд в ДОБИРАЕТСЯ, PHP

У меня есть простая форма, которая генерирует новую фотогалерею, отправляя заголовок и описание к 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 на странице загрузки не отображается правильно. Существует ли способ выйти из амперсанда для, ДОБИРАЮТСЯ?

Спасибо

6
задан Alex Mcp 30 April 2010 в 22:59
поделиться

2 ответа

Как правило, вы захотите 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 .

13
ответ дан 8 December 2019 в 17:19
поделиться
window.location.href = 'display_album.php?album=' + encodeURIComponent(title);

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

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

1
ответ дан 8 December 2019 в 17:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: