PHP Apostrophe问题

时间:2012-04-11 22:36:15

标签: php sql apostrophe

我收到了一个我无法修改其内容的数据库。在通过链接传递URL中的一些变量之前,一切都很顺利,其中一个变量(即“Frank's Used Cars”)中的撇号导致其后面的变量无法传递。

这是目前正在传递的内容:

&var1=600&miles=44000&var2=Frank

什么时候应该是这样的:

&var2=600&miles=44000&var2=Frank's%20Used%20Cars%20&var3=111111111

正如我所说,问题在于撇号。我已经尝试将PHP myadmin上我的数据库中的'dealer'字段更改为'utf8_swedish_ci',并在'latin1_swedish_ci'的MySQL连接排序规则中将其更改为此。

显然,如果我把撇号拿出去,一切都很好,花花公子,但我不能这样做。任何帮助都会很棒!

                            echo"<td>";
                echo$row->var1;
            echo"</td>";
            echo"<td>";
                echo$row->var2;
            echo"</td>";
            echo"<td>";
                echo$row->dealer;
            echo"</td>";
            echo"<td><a href='look.php?price=$row->price&miles=$row->miles&dealer=$row->dealer'>More Info</a>

动态网址链接:

echo"<td>";
                $url="look.php?make=".urlencode($row->make)."&model=".urlencode($row->model)."&colour=".urlencode($row->colour)."&Reg=".urlencode($row->Reg)."&miles=".urlencode($row->miles)."&price=".urlencode($row->price)."&region=".urlencode($row->region)."&miles=".urlencode($row->miles);
            echo"$urlHTML=htmlspecialchars($url)"; 
            echo "<a href=\"$urlHTML\">More Info</a>";
            echo"</td>";

4 个答案:

答案 0 :(得分:1)

已经提到了SQL注入,已经提到了urlencode,但是从你的问题中不清楚数据在什么时候被破坏了。

但解决方案,无论它在哪里打破都是一样的:

  1. 始终在离开PHP的位置转义数据
  2. 始终使用适当的方法根据数据转发数据
  3. 要将数据写入网址,请使用urlencode。

    要将数据写入HTML,请使用htmlentities()

    要将数据写入XML,请使用htmlspecialchars()

    要将字符串数据写入7位电子邮件,请使用quoted_printable_encode()

    要将二进制数据写入电子邮件,请将电子邮件MIME和base64编码为数据或使用uuencode()

    要将数据写入MySQL查询字符串,请使用mysql [i] _real_escape_string()或参数绑定

    ...

答案 1 :(得分:0)

请参阅this function。在你构建你的url字符串之后,它会让你自动地逃避它,这样就不会出现问题 - 或许多其他类似的问题。

答案 2 :(得分:0)

首先,有些字符需要在网址中进行转义,因此请使用urlencode来构建您的网址。

$url="look.php?price=".urlencode($row->price).
   "&miles=".urlencode($row->miles).
   "&dealer=".urlencode($row->dealer);

这将确保您的网址按预期工作。这应该可以解决您的特定问题,但如果您想生成有效的HTML(为什么不能生成!),您可以使用htmlspecialchars

编码HTML的网址
$urlHTML=htmlspecialchars($url); 
echo "<td><a href=\"$urlHTML\">More Info</a>";

答案 3 :(得分:-2)

尝试: $ code = str_replace(“'”,“\'”,$ code);