#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.