“наклонная черта перед каждой кавычкой” проблема [дубликат]

16
задан 9 June 2010 в 13:55
поделиться

6 ответов

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

if(get_magic_quotes_gpc())
{
   $your_text = stripslashes($your_text);
}

Теперь вы можете нормально обрабатывать переменную $ your_text .

Обновление:

Магические цитаты объяснены здесь . Для хорошо написанного кода, как правило, нет никакого вреда в его отключении.

24
ответ дан 30 November 2019 в 17:14
поделиться

Скорее всего, у вас включены магические кавычки. Вам нужно stripslashes() его также.

Лучшим способом будет обернуть это в функцию:

function get_string($array, $index, $default = null) {
    if (isset($array[$index]) && strlen($value = trim($array[$index])) > 0) {
        return get_magic_quotes_gpc() ? stripslashes($value) : $value;
    } else {
        return $default;
    }
}

Которую вы можете использовать как

$annonsera_headline = get_string($_POST, 'annonsera_headline');

Кстати:

А если я даже не использую htmlentities, то все после кавычек исчезает.

На самом деле это все еще есть в HTML источнике, вы только не видите этого. Сделайте View Source ;)


Update согласно вашему обновлению: волшебные кавычки там для предотвращения SQL injection атак в коде новичков. Вы часто видите это в сторонних хостингах. Если вы действительно знаете, что вы делаете в коде, то можете смело отключить его. Но если вы хотите сделать свой код распространяемым, то вы действительно будете учитывать это при сборе параметров запроса. Для этого прекрасно подходит приведенный выше пример функции (вам нужно только написать аналогичные get_boolean(), get_number(), get_array() функции самостоятельно).

4
ответ дан 30 November 2019 в 17:14
поделиться

На самом деле это функция PHP пытающегося быть внимательным к безопасности, к счастью, есть простое исправление, которое выглядит примерно так:

if (get_magic_quotes_gpc()) {$var = stripslashes($var);}

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

Если у вас есть доступ к файлу php.ini и вы хотите изменить его, потому что вы не хотите каждый раз проверять его, вы можете добавить следующую строку в php.ini

magic_quotes_gpc = Off

Или следующее в .htaccess:

php_flag magic_quotes_gpc Off

Надеюсь, это поможет прояснить ситуацию.

2
ответ дан 30 November 2019 в 17:14
поделиться
  1. вы не должны использовать htmlentities() при записи чего-либо в значение поля ввода.
  2. на вашем сервере включена magic_quotes? Попробуйте использовать stripslashes перед выводом.
0
ответ дан 30 November 2019 в 17:14
поделиться

Да, вы должны отключить магические кавычки, если можете. Эта функция устарела и, скорее всего, полностью исчезнет в будущем. Если вы полагались на магические кавычки для экранирования данных (например, при вставке их в базу данных), вы можете открыть себя для уязвимостей SQL-инъекций, если отключите их. Вы должны проверить все свои запросы и убедиться, что вы используете mysql_real_escape_string () .

Я включаю следующий файл, чтобы отменить волшебные кавычки в приложениях, которые развертываются на серверах, не находящихся под моим контролем.

<?php
set_magic_quotes_runtime(0);

function _remove_magic_quotes(&$input) {
    if(is_array($input)) {
        foreach(array_keys($input) as $key) _remove_magic_quotes($input[$key]);
    }
    else $input = stripslashes($input);
}
if(get_magic_quotes_gpc()) {
    _remove_magic_quotes($_REQUEST);
    _remove_magic_quotes($_GET);
    _remove_magic_quotes($_POST);
    _remove_magic_quotes($_COOKIE);
}

return true;
?>
2
ответ дан 30 November 2019 в 17:14
поделиться

Похоже, ваш сервер настроен на использование Magic Quotes .

Вы можете исправить это, убрав их с помощью косых черт или лучше, отключив Magic Quotes .

1
ответ дан 30 November 2019 в 17:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: