Я не знаю ни о каком способе сделать это пользующийся стандартной библиотекой. Но я действительно знаю и использую этот класс, который имеет дело с объектами HTML.
"HTMLEntities является классом Java С открытым исходным кодом, который содержит набор статических методов (htmlentities, unhtmlentities...) для преобразования специальных и расширенных символов в HTML entitities и наоборот".
http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=htmlentities
В вашем файле php.ini, шансы состоит в том, что директива magic_quotes_gpc
включена. Это должно быть отключено по соображениям безопасности. Если у вас нет доступа к файлу php.ini (например, на общем хосте), вы всегда можете сделать то же самое с помощью директивы .htaccess (при условии, что это сервер apache).
В вашем php.ini
magic_quotes_gpc Off
В файле .htaccess:
php_flag magic_quotes_gpc Off
Причина, по которой это происходит, связана со следующей логикой.
Это моя строка. Это потрясающе.
Это моя строка. Это потрясающая
mysql_real_escape_string
теперь имеет два символа для экранирования, обратную косую черту \\
, а также апостроф \ '
.
Это моя строка. Это потрясающе
stripslashes
. Это удаляет два escape-символа, добавленные на шаге 3, но, поскольку одна из обратных косых черт была экранирована, stripslashes
считает, что он принадлежит.
Это моя строка. Это потрясающе
Эта проблема действительно может выйти из-под контроля, если вы повторно отправите эти строки в базу данных, поскольку каждый раз количество обратных косых черт увеличивается.
Быстрая и простая альтернатива было бы просто удалить косые черты, добавленные magic_quotes
перед передачей строки в mysql_real_escape_string
.
$str = stripslashes($_POST['str']);
$str = mysql_real_escape_string($str);
При добавлении строки в базу данных я экранирую ее с помощью
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)
Как видите, запрос имеет на один уровень экранирования больше, чем данные в базе данных и, следовательно, как они появляются при запросе. В вашем случае , вероятно, происходит то, что у вас включены магические кавычки, а затем вы экранируете строки, прежде чем вставлять их в запрос. Это приводит к двойному экранированию и изменению ваших данных. Правильное решение - продолжать экранировать строки так же, как и вы, но отключать магические кавычки. И не ничего делать с данными, когда они поступают из базы данных. Помните, что сначала необходимо очистить данные, уже находящиеся в системе.
фальсификация ваших данных. Правильное решение - продолжать экранировать строки так же, как и вы, но отключать магические кавычки. И не ничего делать с данными, когда они поступают из базы данных. Помните, что сначала необходимо очистить данные, уже находящиеся в системе. фальсификация ваших данных. Правильное решение - продолжать экранировать строки так же, как и вы, но отключать магические кавычки. И не ничего делать с данными, когда они поступают из базы данных. Помните, что сначала необходимо очистить данные, уже находящиеся в системе.