为什么mysql_real_escape_string正在改变我的网址

时间:2011-12-19 20:31:40

标签: php

如果数据是

    $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>

为什么

1 个答案:

答案 0 :(得分:1)

第一行

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

检查是否设置了magic_quotes_gpc。它会检查get_magic_quotes_gpc() function。如果设置了标志,则会在字符串上调用stripslashes。此函数从字符串中删除\。例如,它将每次出现的''转换为'并且每次出现的\\都会转换为\。

第二行

$res = mysql_real_escape_string($res);

进一步修改字符串。它取代了'with'。通常mysql_real_escape_string用于避免安全问题,特别是SQL Injection。将SQL查询发送到SQL数据库并使用字符串连接手动构建SQL语句时,您的代码很容易受到攻击。

总而言之:

  1. 第一行将字符串更改为&lt; a href =“http://www.abc.com”&gt; my Anchor&lt; / a&gt;。那是相同的字符串。
  2. 第二行将字符串更改为&lt; a href = \“http://www.abc.com \”&gt; my Anchor&lt; / a&gt;。这是相同的字符串,其中“被替换为\”。
  3. 这些命令仅在使用字符串连接构建SQL语句时才有意义。