Проблема при вставке текста в модели в базу данных на Zend Framework

#php #mysql #zend-framework

#php #mysql #zend-framework

Вопрос:

Я новичок в «Zend Framework». Итак, я столкнулся с некоторыми проблемами.

Первая из них — это вставка текста в базу данных. например, я вставляю что-то вроде этого «что происходит», и в представлении появляется «что происходит сейчас», и там появляется символ » ‘».

Во-вторых, отправка текста на контроллер, подобного этому (с кодированными символами html) «что происходит», и только «что» доходит до контроллера.

Пожалуйста, помогите мне решить эти проблемы?

Ответ №1:

Существует старая функция PHP, называемая magic quotes, где PHP автоматически экранирует любые данные post / get, чтобы их было «легко» вставить в базу данных. Смотрите http://php.net/manual/en/security.magicquotes.php. Скорее всего, это то, что добавляет кавычки к вашему контенту. Эта функция устарела, поэтому я бы рекомендовал отключить ее в вашем файле php.ini (или htaccess), что должно решить вашу проблему. Предполагая, что вы используете mod_php, просто добавьте это в файл .htaccess:

 php_flag magic_quotes_gpc Off
  

ZF автоматически экранирует содержимое при вставке (при условии, что вы правильно используете Zend_Db), поэтому проблема, с которой вы сталкиваетесь, заключается в том, что данные экранируются дважды.

Можете ли вы предоставить немного больше информации о вашем втором вопросе, например, как вы отправляете текст и как вы используете его в контроллере?

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

1. Как я могу отключить устаревшую функцию в htaccess?

2. Что касается моего второго вопроса, в теле текста есть символы в html-кодировке (например amp;nbsp;,amp; # 163 … ). Когда я отправляю текст на контроллер, только его часть (до первого появления «amp; # 163;») достигает действия. например «Пожалуйста, помогите amp;# 163; мне решить amp; # 163; эту проблему?» -> «Пожалуйста, помогите».

3. Я добавил пример того, как отключить волшебные кавычки в htaccess. Итак, что касается второго вопроса, у вас есть это содержимое в форме, и вы публикуете его на другой странице? Если вы var_dump($_POST); на этой странице, видите ли вы там полную строку?

4. я отключил «php_flag magic_quotes_gpc» в начале .htaccess, но я получаю ошибку http status 500 (внутренняя ошибка сервера). code Перезаписать двигатель на php_flag magic_quotes_gpc Отключить перезапись второго%{REQUEST_FILENAME} -s [ИЛИ] перезаписать второго %{REQUEST_FILENAME} -l [ИЛИ] перезаписать второго %{REQUEST_FILENAME} -d RewriteRule ^.*$ — [NC,L] RewriteRule ^. *$ index.php [NC,L] code

5. Проверьте журнал ошибок Apache, в нем должна быть указана причина ошибки

Ответ №2:

Я никогда не использовал ZF, но я могу рассказать вам, какие функции вам нужно изучить для очистки ввода / вывода

Во время вставки в базу данных

Во время отображения в браузере

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

1. Почему это было отклонено? единственная разница между mysql_real_escape_string() и addslashes() заключается в наборах символов GBK и Big-5. В противном случае вы получите те же результаты (что касается SQL-инъекции и т.д.), Особенно для UTF-8. НО mysql_real_escape_string() требует полного RT для базы данных, добавляя много ненужных задержек.

2. Если вы используете ZF, никогда не используйте упомянутые здесь функции! ZF и его Db-классы сделают это автоматически за вас, если вы используете его правильно. Это намерение Database-Wrapper.