此问题已在此处有答案:
Escaping ampersand in URL(8个回答)
5天前关闭。
我试图创建一个脚本来重定向亚马逊的链接,但当在字符&之后传递get变量url中的链接时,我试图回显变量$_GET ['tolink'],但显示一个剪切的URL,我的代码:$url = $_GET['tolink']; header("HTTP/1.1 301 Moved Permanently"); header("Location: $url");
当在变量中传递url时,此代码重定向到:
https://www.amazon.com/SAMSUNG-50-Inch-Crystal-AU8000-Built/dp/B08Z1RN7NP/ref=sr_1_2?keywords=samsung%20tv
有兴趣https://www.amazon.com/SAMSUNG-50-Inch-Crystal-AU8000-Built/dp/B08Z1RN7NP/ref=sr_1_2?keywords=samsung+tv&qid=1685363216&sr=8-2
我也试过只是var_dump( $_GET['tolink'])
和回声削减网址,为什么?
**更新:**找到一个解决方案,使用$_SERVER['QUERY_STRING']
intestead $_GET['tolink']
它的作品,但是一个安全的解决方案?
2条答案
按热度按时间pw9qyyiw1#
URL可能有参数,如
theurl?param1=val1¶m2=val2
因此,如果你在URL参数的值中有
&
,它会被误认为是URL参数之间的分隔符,这就是为什么它会被删除。如果您的URL的
tolink
参数是在PHP代码中定义的,那么您可以像这样使用urlencode否则,如果它是在你的Javascript代码中定义的,那么你可以使用encodeURIComponent,像这样:
如果您对它进行了硬编码,则将
&
替换为**%26**。编辑
根据评论部分的讨论,似乎没有太多可以使用参数定义的内容,因为它是在其他地方定义的,因此收到了一个断开的链接。因此,
$_SERVER['QUERY_STRING']
帮助解决了这个问题,因为它包含了完整的查询字符串。jtjikinw2#
1.传入URL时使用urlencode():
2.使用URL时使用urldecode():