При добавлении строки в базу данных я экранирую ее с помощью mysql_real_escape_string()
, и в базе данных сохраняется следующее:
<span style=\\\"text-decoration:underline;\\\">underline</span>
Нет, это не так. Когда вы экранируете строки в запросе sql, это только для передачи данных в запросе. База данных анализирует запрос и сохраняет данные в базе данных без лишних слешей. Таким образом, когда вы извлекаете данные из базы данных, вы должны , а не ничего не спасать. Это распространенное заблуждение.
Если вы обнаружите, что на выходе есть лишние косые черты, возможно, у вас включены магические кавычки. Выключите их .
Edit:
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)
Как вы можете видеть, запрос имеет еще один уровень экранирования, чем данные, представленные в базе данных, и, следовательно, то, как он появляется при запросе. В вашем случае , вероятно, происходит, когда у вас включены магические кавычки, а затем вы экранируете строки, прежде чем встраивать их в запрос. Это приводит к двойному выходу, подделке ваших данных. Правильное решение - продолжать экранировать строки, как вы, но отключить магические кавычки. И не ничего не делает с данными, которые поступают из базы данных. Помните, что данные, уже находящиеся в системе, должны быть сначала очищены.