2011-12-19 2 views
-5

если данныепочему mysql_real_escape_string меняет свой адрес

$data = '<a href="http://www.abc.com">my Anchor</a> 

эта функция

$res = get_magic_quotes_gpc() ? stripslashes($data) : $data; 
    $res = mysql_real_escape_string($res); // php 4.3 and higher     

Преобразовать его

<a href="\"http://www.abc.com"">my Anchor</a> 

почему

+0

Начните отлаживать свой код и узнать, какой из многих кодов меняет значение так, как вам не нравится. – hakre

+0

код в порядке, я отлаживал его, это две линии, которые я тоже стараюсь запускать. его не работает так, как должно быть –

+0

Я бы предположил, что если что-то не работает так, как должно быть, по определению это не нормально? – Robus

ответ

1

Первая линия

$res = get_magic_quotes_gpc() ? stripslashes($data) : $data; 

проверяет, установлено ли magic_quotes_gpc. Он проверяет с помощью get_magic_quotes_gpc() function. Если флаг установлен, он вызывает stripslashes в строке. Эта функция удаляет \ из строки. Например, это превращает каждое появление «в» и каждое вхождение \\ в \.

Вторая линия

$res = mysql_real_escape_string($res); 

дополнительно изменяет строку. Он заменяет «на». Обычно mysql_real_escape_string используется, чтобы избежать проблем с безопасностью, в частности SQL Injection. Ваш код уязвим, когда вы отправляете SQL-запросы в базу данных SQL и вручную создаете инструкцию SQL при конкатенации строк.

Всего:

  1. Первая строка изменяет строку < A HREF = "http://www.abc.com" > мой Anchor </с >. Это же строка.
  2. Вторая строка изменяет строку на < a href = \ "http: //www.abc.com \" > my Anchor </a >. Это та же строка, где «было заменено на \».

Эти команды имеют смысл только при использовании конкатенации строк для создания операторов SQL.

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