PHP: данные POST + апострофы

Представьте себе это:

  • Данные формы содержат апостроф
  • Форма отправлена
  • Данные POST сериализуются
  • Данные POST записываются в базу данных
  • Данные базы данных извлекаются
  • Данные не могут быть десериализованы

Проблема обнаружена в сериализованных данных. Пробовал без апострофа и с апострофом:

  • s:7:"компания";s:12:"компания Джо"
  • s:7:"компания";s:14:"компания Джо"

Я знаю, что данные POST добавляют косые черты к кавычкам и апострофам, но где-то мои косые черты удаляются, что нарушает сериализацию. Я нигде не использую функцию stripslashes() — есть идеи?


person Community    schedule 03.10.2009    source источник
comment
Вы, вероятно, можете понять это, посмотрев на вывод каждого этапа, который вы перечислили.   -  person strager    schedule 03.10.2009


Ответы (2)


Вы уверены, что косая черта добавляется? Это происходит только в том случае, если включены Magic Quotes.

person jeroen    schedule 03.10.2009
comment
Волшебные кавычки включены, и добавлены косые черты. Я сузил до следующего: в моем SQL-запросе я окружаю значения апострофами. Попробуйте следующее, и вы увидите, что $test = 'company;s:14:Joe\'s company'; эхо $тест; возвращает строку БЕЗ косой черты. Вот почему косая черта не присутствует ни разу в БД. Но поскольку в сериализованной строке есть кавычки и апострофы, как мне вставить их в БД, не используя их?! - person ; 04.10.2009
comment
Я нашел решение. Несмотря на то, что Magic Quotes добавляет косую черту к данным POST, вы должны выполнить дополнительную команду addlashes() для сериализованной строки, чтобы ее можно было добавить в базу данных, закрыв либо кавычками, либо апострофами. Как только значение извлечено из БД и несериализовано, можно использовать stripslashes(). - person ; 04.10.2009
comment
В качестве ответа на ваш первый вопрос: используйте подготовленный оператор, проверьте mysqli или pdo. - person jeroen; 04.10.2009

Если вы записываете сериализованные данные в БД и не используете какие-либо отношения или расширенные функции БД, вы можете просто кодировать сериализованные данные в base64 перед вставкой в ​​БД и декодировать при обратном чтении.

person code_burgar    schedule 03.10.2009