我收到了一个我无法修改其内容的数据库。在通过链接传递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)."®ion=".urlencode($row->region)."&miles=".urlencode($row->miles);
echo"$urlHTML=htmlspecialchars($url)";
echo "<a href=\"$urlHTML\">More Info</a>";
echo"</td>";
答案 0 :(得分:1)
已经提到了SQL注入,已经提到了urlencode,但是从你的问题中不清楚数据在什么时候被破坏了。
但解决方案,无论它在哪里打破都是一样的:
要将数据写入网址,请使用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);