2

我得到了一个我无法修改其内容的数据库。一切都很顺利,直到我通过链接在 URL 中传递了一些变量,并且其中一个变量(即“弗兰克的二手车”)中的撇号导致其后面的变量不被传递。

这是目前正在通过的:

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

什么时候应该是这样的:

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

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

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

                            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

4 回答 4

1

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

但是解决方案,无论它在哪里中断都是相同的:

  1. 总是在离开 PHP 的地方转义数据
  2. 始终根据数据的去向使用适当的方法来转义数据

要将数据写入 URL,请使用 urlencode。

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

将数据写入 XML 使用htmlspecialchars ()

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

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

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

...

于 2013-08-19T12:49:56.517 回答
0

参考这个功能。在你构建了你的 url 字符串之后,它会让你自动转义它,这样问题就不会出现 - 或者许多其他人喜欢它。

于 2012-04-11T22:38:49.723 回答
0

首先,有一些字符需要在 URL 中转义,所以使用urlencode来构建你的 url。

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

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

$urlHTML=htmlspecialchars($url); 
echo "<td><a href=\"$urlHTML\">More Info</a>";
于 2012-04-12T07:59:44.103 回答
-2

试试: $code = str_replace("'", "\'", $code);

于 2012-04-11T22:42:41.740 回答