Функция экранирования цитаты работает неправильно - PullRequest
0 голосов
/ 12 ноября 2009

Я пытаюсь выяснить, почему эта функция не работает правильно.

Добавляется дополнительный \ каждый раз, когда я редактирую свои записи.

Онлайн сервер имеет следующие настройки:

magic_quotes_gpc On 
magic_quotes_runtime Off 
magic_quotes_sybase Off

Вот код:

function esc($s)
{
  if (get_magic_quotes_gpc()) {
    if (ini_get('magic_quotes_sybase'))
      $s = str_replace("''", "'", $s);
    else
      $s = stripslashes($s);
  } //if 
  return mysql_real_escape_string($s);
}

Редактировать заметку:

Я попытался полностью удалить эту функцию, чтобы посмотреть, что она делает ... и она делает то же самое, поэтому я понял, что addslashes также используется в коде для того же.

Дополнительные \ были там, потому что magic_quote был ON

Ответы [ 3 ]

2 голосов
/ 12 ноября 2009

Ваша функция имеет мало смысла. Если включены магические кавычки (например, экранированный ввод), вы можете удалить его. Если он не включен, вы избежите этого. Таким образом, вы получите разные результаты, в зависимости от того, есть ли у вас волшебная цитата или нет.

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

  1. Отключить магические кавычки или полностью изменить их действие .
  2. Либо escape-строки при построении запросов SQL или (лучше) использование подготовленных операторов .
  3. Не unescape / strip / что угодно, когда вы получаете его обратно из базы данных.
1 голос
/ 12 ноября 2009

Возможно, вы захотите удалить полоску, даже если magic_quotes_sybase включен:

function esc($s)
{
    if (get_magic_quotes_gpc()) {
        if (ini_get('magic_quotes_sybase'))
            $s = str_replace("''", "'", $s);

        $s = stripslashes($s);
    } //if 
    return mysql_real_escape_string($s);
}

Возможно, вы захотите взглянуть на страницу PHP get_magic_quotes_gpc , на этой странице есть несколько комментариев пользователей с довольно элегантными решениями для удаления слешей.

0 голосов
/ 12 ноября 2009

Хорошо, я исправил проблему. Быстрое решение на данный момент, я удалил function esc($s).
Я изменил Magic_Quote на OFF в php.ini.
Я держу аддлэш-решение.

...