2011-02-02 2 views
0

На серверах есть магические кавычки, и по какой-то причине они не могут быть отключены ..... теперь stripslashes удалят все косые черты, добавленные магическими кавычками, но если пользователь поместил косые черты в поле ввода (мы разрешаем косые черты), stripslashes также удалили бы это.Обходное решение для магических котировок Gpc в php

Я пытаюсь для регулярных выражений, которые бы удалить косую черту, только если она предшествует {»"} ....

Любая помощь будет оценена.

+0

Я думаю, что ваш вопрос должен состоять в том, как отключить магические цитаты –

+0

no..i не хочу отключать его ..... скорее, я не могу .. с волшебными котировками на, мне нужен исходный ввод .. . Надеюсь, что вы получите то, что я пытаюсь сказать. –

+0

* «... stripslashes ** ** ** ** удалил бы это также» * ...? Вы принимаете или пытаетесь? – deceze

ответ

1

Я использую этот код конфигурационный файл:..

// remove slashes, if they are being automatically added 
if (get_magic_quotes_gpc()) { 
    $_GET = array_map('stripslashes', $_GET); 
    $_POST = array_map('stripslashes', $_POST); 
    $_COOKIE = array_map('stripslashes', $_COOKIE); 
    $_REQUEST = array_map('stripslashes', $_REQUEST); // see ThiefMaster's comment 
} 

Это единственное место, где я должен беспокоиться о слешами Во всех других местах, я могу с уверенностью предположить, что не существует никаких «волшебных кавычек»

Хотя, stripslashes() не работает с массивами, поэтому, если вы ожидаете иметь массивы как значения в $ _GET, $ _POST или $ _COOKIE (в общедоступных веб-страницах/системах вы ожидаете наличия массивов), эта функция может использоваться как обратный вызов:

function stripslashes_recursive($value) { 
    if (is_array($value)) { 
     return array_map(__FUNCTION__, $value); 
    } 
    return stripslashes($value); 
} 

PHP 5.3 пользователи могут использовать замыкание в качестве обратного вызова:

$stripslashes = function($value) use(&$stripslashes) { 
    if (is_array($value)) { 
     return array_map($stripslashes, $value); 
    } 
    return stripslashes($value); 
}; 

Это не будет загрязнять глобальный охват с дополнительной функцией (stripslashes_recursive()).

+0

** Вы забыли '$ _REQUEST' **. – ThiefMaster

+0

@ThiefMaster, на самом деле, я никогда не использую массив $ _REQUEST. Хотя, если другие используют его, они должны включить его тоже. – binaryLV

+0

@binaryLV: «если вы ожидаете наличия массивов в качестве значений» Было бы лучше, если бы это было в файле конфигурации, ожидать неожиданного и просто запустить функцию сопоставления? –

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