英文:
$_GET not display character like &
问题
I tried to create a script to redirect a link on Amazon, but when I pass the link as a GET variable, the URL doesn't return everything after the character "&." I tried to echo the variable $_GET['tolink'], but it displays a truncated URL. My code is as follows:
$url = $_GET['tolink'];
header("HTTP/1.1 301 Moved Permanently");
header("Location: $url");
When I pass the URL as a variable, this code redirects to:
https://www.amazon.com/SAMSUNG-50-Inch-Crystal-AU8000-Built/dp/B08Z1RN7NP/ref=sr_1_2?keywords=samsung%20tv
Instead of:
https://www.amazon.com/SAMSUNG-50-Inch-Crystal-AU8000-Built/dp/B08Z1RN7NP/ref=sr_1_2?keywords=samsung+tv&qid=1685363216&sr=8-2
I also tried to use var_dump($_GET['tolink'])
and it still echoed a truncated URL. Why?
UPDATE: I found a solution. I used $_SERVER['QUERY_STRING']
instead of $_GET['tolink']
, and it works. But is this a safe solution?
英文:
i tried to create a script to redirect link of amazon, but when pass the link in a get variable url not return Url after the character &, i tried to echo the variable $_GET['tolink'] but display a cut url, my code:
$url = $_GET['tolink'];
header("HTTP/1.1 301 Moved Permanently");
header("Location: $url");
when pass the url in a variable thi code redirect to :
https://www.amazon.com/SAMSUNG-50-Inch-Crystal-AU8000-Built/dp/B08Z1RN7NP/ref=sr_1_2?keywords=samsung%20tv
intestead to
https://www.amazon.com/SAMSUNG-50-Inch-Crystal-AU8000-Built/dp/B08Z1RN7NP/ref=sr_1_2?keywords=samsung+tv&qid=1685363216&sr=8-2
i tried also just to var_dump( $_GET['tolink'])
and echo cut url, why ?
UPDATE: found a solution, use $_SERVER['QUERY_STRING']
intestead $_GET['tolink']
it's works but is a safe solution ?
答案1
得分: 2
A URL may have parameters, like
theurl?param1=val1¶m2=val2
so, if you have &
inside the value of your URL parameter, it is being mistaken for the separator between URL parameters and this is why it is being cut.
If your URL's tolink
parameter was defined in your PHP code, then you can use urlencode, like this
echo '<a href="someurl?tolink=', urlencode($thelink), '">';
Otherwise, if it was defined at your Javascript code, then you can use encodeURIComponent, like this:
var url = `someurl?tolink=${encodeURIComponent(thelink)}`;
If you hard-coded it, then replace the &
with %26.
EDIT
Based on the discussion in the comment-section it looks like there was not much that could be done with the parameter definition, as it was defined somewhere else and, as a result a broken link was received. Hence, $_SERVER['QUERY_STRING']
helped in solving the issue, as that contained the full query string.
英文:
A URL may have parameters, like
theurl?param1=val1¶m2=val2
so, if you have &
inside the value of your URL parameter, it is being mistaken for the separator between URL parameters and this is why it is being cut.
If your URL's tolink
parameter was defined in your PHP code, then you can use urlencode, like this
<?php
echo '<a href="someurl?tolink=', urlencode($thelink), '">';
?>
Otherwise, if it was defined at your Javascript code, then you can use encodeURIComponent, like this:
var url = `someurl?tolink=${encodeURIComponent(thelink)}`;
If you hard-coded it, then replace the &
with %26.
EDIT
Based on the discussion in the comment-section it looks like there was not much that could be done with the parameter definition, as it was defined somewhere else and, as a result a broken link was received. Hence, $_SERVER['QUERY_STRING']
helped in solving the issue, as that contained the full query string.
答案2
得分: -1
- 在将URL作为参数传递时使用urlencode()函数:
$amazonURL = 'your_amazon_url_here';
$encodedURL = urlencode($amazonURL);
// 然后您可以将$encodedURL作为参数使用
- 在使用URL时,请使用urldecode()函数:
$url = urldecode($_GET['tolink']);
header("HTTP/1.1 301 Moved Permanently");
header("Location: $url");
英文:
1. Use urlencode() when passing the URL as a parameter:
$amazonURL= 'your_amazon_url_here';
$encodedURL = urlencode($amazonURL);
// then you can use $encodedURL as a parameter
2. Use urldecode() when using the URL:
$url = urldecode($_GET['tolink']);
header("HTTP/1.1 301 Moved Permanently");
header("Location: $url");
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论