php $_GET不显示类似& [duplicate]的字符

gzszwxb4  于 2023-06-04  发布在  PHP
关注(0)|答案(2)|浏览(131)

此问题已在此处有答案

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']它的作品,但是一个安全的解决方案?

pw9qyyiw

pw9qyyiw1#

URL可能有参数,如

theurl?param1=val1&param2=val2

因此,如果你在URL参数的值中有&,它会被误认为是URL参数之间的分隔符,这就是为什么它会被删除。
如果您的URL的tolink参数是在PHP代码中定义的,那么您可以像这样使用urlencode

<?php
echo '<a href="someurl?tolink=', urlencode($thelink), '">';
?>

否则,如果它是在你的Javascript代码中定义的,那么你可以使用encodeURIComponent,像这样:

var url = `someurl?tolink=${encodeURIComponent(thelink)}`;

如果您对它进行了硬编码,则将&替换为**%26**。
编辑
根据评论部分的讨论,似乎没有太多可以使用参数定义的内容,因为它是在其他地方定义的,因此收到了一个断开的链接。因此,$_SERVER['QUERY_STRING']帮助解决了这个问题,因为它包含了完整的查询字符串。

jtjikinw

jtjikinw2#

1.传入URL时使用urlencode():

$amazonURL= 'your_amazon_url_here';

$encodedURL = urlencode($amazonURL);

// then you can use $encodedURL as a parameter

2.使用URL时使用urldecode():

$url = urldecode($_GET['tolink']);

header("HTTP/1.1 301 Moved Permanently"); 

header("Location: $url");

相关问题