Двойное экранирование Zend Framework

Я использую структуру Zend с доктриной для проекта, проблема в том, что когда я вставляю в базу данных строку, подобную O'Shea, она вставляет O\'Shea. Я думаю, это из-за двойного экранирования. Один, когда я получаю сообщение, и один, когда я использую доктрину, почему, когда я печатаю_r($_POST), я получаю уже экранированные значения?

синтаксис запроса доктрины:

$req = $this->getRequest()->getPost();
$company = Doctrine::getTable('Project_Model_Companies')->find($company_id);
$company->name = $req['name'];
$company->save();

Пожалуйста, помогите мне, как избежать этого двойного экранирования или в чем проблема? Спасибо.


person Centurion    schedule 19.05.2011    source источник
comment
возможно магические кавычки включены   -  person Ibu    schedule 19.05.2011


Ответы (2)


Похоже, magic_quote_gpc включен .

Вы можете проверить, включены ли магические кавычки, с помощью get_magic_quotes_gpc

echo (get_magic_quotes_gpc()) ? 'Magic qoutes Enabled' : "Magic qoutes Disabled";

Я настоятельно рекомендую Отключение волшебных кавычек.

Попробуйте следующую директиву файла .htaccess:

php_value magic_quotes_gpc Off 

Или в вашем php.ini

magic_quotes_gpc = Off
person Benjamin Cremer    schedule 19.05.2011
comment
В директиве .htaccess есть небольшая опечатка: php_value magic_quotes_gpc Off (обратите внимание на отсутствие s в кавычках) - person Attila Fulop; 21.11.2012
comment
Спасибо Аттиле. Исправлена ​​опечатка. - person Benjamin Cremer; 21.11.2012

В дополнение к ответу Бенджамина Кремера:

Иногда волшебные кавычки нельзя отключить, используйте этот код в своем индексном файле, чтобы эта проблема никогда больше не беспокоила вас:

if (get_magic_quotes_gpc()) {
  function stripslashes_deep($value)
  {
    $value = is_array($value) ?
          array_map('stripslashes_deep', $value) :
          stripslashes($value);

    return $value;
  }

  $_POST = array_map('stripslashes_deep', $_POST);
  $_GET = array_map('stripslashes_deep', $_GET);
  $_COOKIE = array_map('stripslashes_deep', $_COOKIE);
  $_REQUEST = array_map('stripslashes_deep', $_REQUEST);
}
person Xerkus    schedule 19.05.2011