Разные результаты между JS encodeURI() и PHP urldecode()

#php #javascript #database #url

#php #javascript #База данных #url

Вопрос:

Это исходная строка

 Apple iPad 2 16GB Wifi   3G (ATamp;T)
  

после js encodeURI()

 Apple iPad 2 16GB Wifi   3G (ATamp;T)
  

после PHP urldecode(), через $_GET из вызова AJAX

 Apple iPad 2 16GB Wifi   3G (ATamp;T)
  

после вставки в базу данных MySQL, заключенную в одинарные кавычки

 Apple iPad 2 16GB Wifi   3G (AT
  

Как мне получить исходную строку точно в базу данных?

Комментарии:

1. Если данные действительны непосредственно перед вставкой их в MySQL, проблема не может иметь ничего общего с кодировкой URL. Кроме того, как вы передаете аргумент GET, который вам нужно декодировать из PHP? Декодирование происходит автоматически.

Ответ №1:

Вы должны использовать encodeURIComponent вместо encodeURI.

Тогда строка будет Apple iPad 2 16GB Wifi + 3G (AT&T) после encodeURIComponent в JavaScript, которая будет преобразована обратно в Apple iPad 2 16GB Wifi 3G (ATamp;T) с urldecode в PHP.

Ответ №2:

Ваше поле базы данных, скорее всего, недостаточно длинное, чтобы содержать полную строку.

Также вы должны закодировать строку с encodeURIComponent вместо encodeURI

Ответ №3:

Посмотрите PHP.Функция urlencode в JS — она ведет себя точно так же, как urlencode в PHP, поэтому urldecode будет работать идеально.

Ответ №4:

rawurlencode в PHP сохранит » «. Не уверен насчет амперсанда, вы могли бы попробовать передать строку в htmlentities.