Почему спецсимвол выходит из MySql db странно после того, как я перешел на сессии? - PullRequest
0 голосов
/ 21 октября 2010

У меня есть классифицированный веб-сайт, и я недавно изменил вставку объявлений, чтобы использовать переменные сеанса php вместо большого количества POST и FORMS ...

Итак, прежде чем перейти к сеансам, все работало хорошо, и всеспециальные символы отображаются корректно.

Теперь, когда я перешел на СЕССИИ, вместо специальных символов я получаю забавные символы.

Вот код, поясняющий лучше.

СначалаДО перехода к сеансам: ниже находится первая страница, которая показывает страницу подтверждения (предварительный просмотр), где пользователи могут нажать «ОК» или «Вернуться и изменить»:

  //VERIFICATION PAGE:
  <form>
   <input type="text" value="<?php echo htmlentities($_POST['annonsera_headline'], ENT_QUOTES, 'utf-8'); ?>">

  //IF OK, THEN TO THE PAGE WHERE THE CLASSIFIED IS INSERTED
   $headline= mysql_real_escape_string($_POST['headline']);

Теперь вышеприведенное сработало, но затемЯ перешел на сеансы:

    //VERIFICATION PAGE:
    $headline = htmlentities($_POST['annonsera_headline'], ENT_QUOTES, 'utf-8');
    $_SESSION['headline'] = $headline;                 

  //IF OK, THEN TO THE PAGE WHERE THE CLASSIFIED IS INSERTED
  $headline= mysql_real_escape_string($_SESSION['headline']);

Вышеприведенное здесь изменило все символы в заголовке на соответствующие объекты HTML.

Что мне здесь делать?

И в моем MySqlполе заголовка, нет HTML ENTITY, есть правильный текст.Но на моих веб-страницах и в объявлениях специальные символы выглядят забавно, даже если они взяты из одного и того же поля mysql (что хорошо выглядит в phpmyadmin).

Есть идеи?

Спасибо

Ответы [ 2 ]

1 голос
/ 21 октября 2010

Убедитесь, что ваше соединение с mysql является безопасным для utf8. Прежде всего, я бы начал с выдачи SET NAMES UTF8 в базу данных сразу после подключения.Также убедитесь, что в поле таблицы указано utf-8, установив параметры сортировки таблиц

Надеюсь, что это поможет

0 голосов
/ 21 октября 2010

Вы HTML-кодируете свой отправленный заголовок, прежде чем поместить его в сеанс.Затем вы извлекаете закодированное значение из сеанса и вставляете его в базу данных.

Ни хранилище сеансов, ни база данных не являются HTML, поэтому вам не следует кодировать значения здесь.Вы должны кодировать HTML-код только при выводе его на HTML-страницу (например, <input> в первом примере).Кроме того, вам, вероятно, следует использовать htmlspecialchars() вместо htmlentities(), который бессмысленно пытается использовать ссылки на сущности HTML для некоторых (но не всех) символов Юникода.

Убедитесь, что ваша страница обслуживается как UTF-8(с заголовком Content-Type и / или <meta>) ваше подключение к базе данных настроено на использование UTF-8 (с использованием mysql_set_charset(), предпочтительно не SET NAMES), и что каждый текстовый столбец каждой таблицы установлен на использованиеСортировка UTF-8.

Для чего бы я не хотел использовать сессии здесь.Для создания многоэтапных форм более надежным является использование скрытых значений для передачи предыдущих входных данных: рассмотрим, что происходит, когда пользователь открывает два окна браузера и пытается ввести две классификации одновременно.Значения из одной формы будут перезаписывать значения из другой формы, смешивая два процесса.(Другая альтернатива - иметь одностраничную форму с некоторыми сценариями на стороне клиента, чтобы показывать только ее часть одновременно.)

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