2009-11-12 4 views
0

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

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

Интернет-сервер имеет следующие параметры:

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

+0

Вы имеете в виду, что получаете дополнительные обратные косые черты, например. «Строка возврата вашей функции \\ выглядит так:« – RMcLeod

+0

да, это добавляет один раз, каждый сохраняет – lena

+0

@ Dukeling, пожалуйста, прекратите это. магические кавычки - более выраженный термин, чем магические цитаты gpc. Просто добавьте синоним, если вы хотите принять такое участие. –

ответ

0

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

1

Вы, вероятно, хотите stripslashes даже если 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); 
} 

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

+0

Я пробовал свой код без остального, и у меня все еще такая же проблема. – lena

+0

Проблема в том, что вы получаете слишком много черенок?Вы уверены, что дополнительные косые черты не добавляются до того, как строка будет отправлена ​​в функцию? Функция stripslashes будет удалена только одним набором косых черт. – tplaner

2

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

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

  1. Disable magic quotes or reverse its effect globally.
  2. Либоescape strings, когда вы строите SQL запросов или (лучше) use prepared statements.
  3. Не unescape/strip/что угодно, когда вы возвращаете его из базы данных.
+0

можно ли использовать escape-строку, даже если magic_quotes_gpc включен? – lena

+0

Что вы подразумеваете под "use escape string"? – troelskn

Смежные вопросы