PHP mysql_real_escape_string ()-> stripslashes () оставляющий несколько наклонных черт

Я не знаю ни о каком способе сделать это пользующийся стандартной библиотекой. Но я действительно знаю и использую этот класс, который имеет дело с объектами HTML.

"HTMLEntities является классом Java С открытым исходным кодом, который содержит набор статических методов (htmlentities, unhtmlentities...) для преобразования специальных и расширенных символов в HTML entitities и наоборот".

http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=htmlentities

18
задан teaforchris 5 October 2009 в 21:26
поделиться

2 ответа

Лучшее решение

В вашем файле php.ini, шансы состоит в том, что директива magic_quotes_gpc включена. Это должно быть отключено по соображениям безопасности. Если у вас нет доступа к файлу php.ini (например, на общем хосте), вы всегда можете сделать то же самое с помощью директивы .htaccess (при условии, что это сервер apache).

В вашем php.ini

magic_quotes_gpc Off

В файле .htaccess:

php_flag magic_quotes_gpc Off

Почему это происходит?

Причина, по которой это происходит, связана со следующей логикой.

  • Это моя строка. Это потрясающе.
  • Magic Quotes избегает апострофа, прежде чем попадет в ваш код.
    • Это моя строка. Это потрясающая
  • mysql_real_escape_string теперь имеет два символа для экранирования, обратную косую черту \\ , а также апостроф \ '.
    • Это моя строка. Это потрясающе
  • Эта новая строка с суперэкранированием хранится в базе данных.
  • Когда строка извлекается из базы данных, она передается в stripslashes . Это удаляет два escape-символа, добавленные на шаге 3, но, поскольку одна из обратных косых черт была экранирована, stripslashes считает, что он принадлежит.
    • Это моя строка. Это потрясающе
  • Эта проблема действительно может выйти из-под контроля, если вы повторно отправите эти строки в базу данных, поскольку каждый раз количество обратных косых черт увеличивается.

    Альтернативное решение

    Быстрая и простая альтернатива было бы просто удалить косые черты, добавленные magic_quotes перед передачей строки в mysql_real_escape_string .

    $str = stripslashes($_POST['str']);
    $str = mysql_real_escape_string($str);
    
    81
    ответ дан 30 November 2019 в 05:40
    поделиться

    При добавлении строки в базу данных я экранирую ее с помощью mysql_real_escape_string () , и в базе данных сохраняется следующее:

    underline

    Нет, это не так. Когда вы экранируете строки в sql-запросе, это только для передачи данных в запросе. База данных анализирует запрос и сохраняет данные в базе данных без лишних косых черт. Таким образом, когда вы извлекаете данные из базы данных, вы не должны ничего отменять экранирование. Это распространенное заблуждение.

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

    Изменить:

    mysql> create table foo (bar text) ;
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> INSERT INTO foo (bar) VALUES ("<span style=\\\"text-decoration:underline;\\\">underline</span>");
    Query OK, 1 row affected (0.00 sec)
    
    mysql> SELECT * FROM foo;
    +-------------------------------------------------------------+
    | bar                                                         |
    +-------------------------------------------------------------+
    | <span style=\"text-decoration:underline;\">underline</span> | 
    +-------------------------------------------------------------+
    1 row in set (0.00 sec)
    

    Как видите, запрос имеет на один уровень экранирования больше, чем данные в базе данных и, следовательно, как они появляются при запросе. В вашем случае , вероятно, происходит то, что у вас включены магические кавычки, а затем вы экранируете строки, прежде чем вставлять их в запрос. Это приводит к двойному экранированию и изменению ваших данных. Правильное решение - продолжать экранировать строки так же, как и вы, но отключать магические кавычки. И не ничего делать с данными, когда они поступают из базы данных. Помните, что сначала необходимо очистить данные, уже находящиеся в системе.

    фальсификация ваших данных. Правильное решение - продолжать экранировать строки так же, как и вы, но отключать магические кавычки. И не ничего делать с данными, когда они поступают из базы данных. Помните, что сначала необходимо очистить данные, уже находящиеся в системе.

    фальсификация ваших данных. Правильное решение - продолжать экранировать строки так же, как и вы, но отключать магические кавычки. И не ничего делать с данными, когда они поступают из базы данных. Помните, что сначала необходимо очистить данные, уже находящиеся в системе.

    3
    ответ дан 30 November 2019 в 05:40
    поделиться
    Другие вопросы по тегам:

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