我想我之前已经看过这个问题,但我认为它的回答还不够好,因为我无法让它发挥作用。
案件:
我想在我的MySQL数据库中插入一个URL,如下所示:
$url = $_POST["url"]; //$_POST["url"] = "http://example.com/?foo=1&bar=2& ...";
$sql = mysql_query("INSERT INTO table(url) values('$url')") or die ("Error: " . mysql_error());
现在,URL已正确插入到数据库中,但当我查看它时,它看起来像这样:
http://example.com/?foo=1
就像在“&”处剪切网址一样字符。我尝试过:mysql_real_escape_string
,htmlspecialchars
,通过"\"
等逃避。似乎没有任何效果。
我已经读过你可以用“SQL Plus”或类似的东西来做这件事。
提前致谢。
问候,VG
答案 0 :(得分:5)
这里的问题可能与数据库查询无关,更多的是如何将url传递给页面。我怀疑你会发现用于加载页面的URL类似于:
http://mydomain.com/?url=http://example.com/?foo=1&bar=2
这将导致$_GET
看起来像这样:
array (
'url' => 'http://example.com/?foo=1',
'bar' => '2'
)
您需要的是使用看起来更像这样的网址调用页面:
http://mydomain.com/?url=http://example.com/?foo=1%26bar=2
请注意,&
已编码为%26
。 现在 $_GET
将如下所示:
array (
'url' => 'http://example.com/?foo=1&bar=2'
)
...并且查询将按预期工作。
编辑我刚刚注意到您正在使用$_POST
,但相同的规则适用于请求正文,我仍然认为这是您的问题。如果你是,我怀疑,使用Javascript / AJAX来调用页面,你需要通过encodeURIComponent()
传递URL字符串。
答案 1 :(得分:0)
很可能没有传递查询字符串。看起来你是从FORM
帖子收到的。请记住,使用GET
方法的表单帖子附加查询字符串以传递所有表单变量,因此通常会忽略操作中的任何查询字符串。
因此,首先要做的是在尝试INSERT
之前回显URL,以确保获得您认为自己的数据。
如果您需要使用URL传递变量,请使用隐藏输入,并在表单标记上使用GET
方法,它们将作为查询字符串参数神奇地附加。
答案 2 :(得分:0)
对!! DaveRandom说,这里的问题与数据库查询无关。 只需使用javascript函数“encodeURIComponent()”。
答案 3 :(得分:-1)
根据您对存储值的处理方式,您还需要urlencode()字符串:http://php.net/manual/de/function.urlencode.php
干杯, 最大
P.S。:SQL * Plus适用于Oracle数据库。
答案 4 :(得分:-1)
也许用urlencode转义url然后你可以解码它,如果你想把它拉出db