高级url缩短问题与urlencode替换&用“&”号签名


Premium url shortner issue with urlencode replacing & sign with ampersand

作为一个新手和初学者php学习者,我使用Code-Canyon 高级URL Shortner脚本,并做了2天的研究。很遗憾,我无法解决我的问题。

url缩短脚本是url编码的API url,它发送到脚本,在这样做是用&代替&符号导致url不能正确工作在最终的目标页面。

我试过使用preg_replace, str_replace,也试过在目标页面上使用urldecode,但这些似乎都不起作用。下面是我当前的脚本:

$makeshort = "http://mywebsite.com/email/quote.php?quoteid=$visitor&customertype=fhbs";
$mkshrt = str_replace("/&/","%26",$makeshort);
$short = "http://shorturl.com/api?&api=REMOVED&format=text&url=".urlencode($mkshrt);
// Using Plain Text Response
$api_url = $short;
$res= @file_get_contents($api_url);
if($res)
$shorturl = $res;
$shorty = json_decode($shorturl);
$shorturl = $shorty->{'short'};
echo $shorturl;

注意:在api url中看到&format=text的地方,我试图使用它与&format=text一起使用,但这没有什么区别。

我希望有一个简单而快速的方法来解决这个问题,因为我只传递了2个变量,它的第二个变量是这样显示的:

mywebsite.com/email/quote.php?quoteid=01234567890&customertype=fhbs

所以customertype变量是由于amp;符号而弄乱的。

我真诚地希望有专业人士能告诉我最好的方法,甚至是一个简单的方法来解决这个问题,因为我真的束手无策!我的知识不足以研究准确的关键短语,以便为自己指明正确的方向。

感谢您花时间阅读这篇文章,我希望有人能好心地帮助我。

我知道这种感觉,因为我自己刚刚开始适应编码和开发。

我个人会通过两种方式之一来解决这个问题,如果你已经尝试过使用htmlspecialchars或htmlentities以及urldecode,那么实现这一点的最简单和最快的方法是读取URL字符串,然后使用str_replace将&符号替换为&,并对页面进行元刷新或'标头位置重定向

这是我的意思与一个简短的例子,但必须强调,一些额外的安全可能需要,这只是一个快速修复,而不是一个安全的稳定和永久的修复,虽然一个人可以玩这个,也许工作出一些自己的情况。

$url = "http://". $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
if(strstr($url, "&")){
    $url = "http://". $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
    $url = str_replace('&', '&', $url);
    echo "<meta http-equiv='refresh' content='0;URL=$url'>";
    exit;
}

标题位置的替代方法:

$url = "http://". $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
if(strstr($url, "&amp;")){
    $url = "http://". $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
    $url = str_replace('&amp;', '&', $url);
    header("Location: $url");
    exit();
}

这将完全从url中删除任何&amp;符号并将其替换为&。你也可以用这个来从url字符串中删除更多的内容,并替换像/或禁用词这样的内容。

输出的示例如下:

导致问题的原始url:

http://mywebsite.com/email/quote.php?quoteid=1234567890 &amp; customertype=fhbs

脚本执行并刷新页面后的新url:

http://mywebsite.com/email/quote.php?quoteid=1234567890& customertype = fhbs

正如你从上面的超链接文本中看到的,&号打破了字符串,之后的一切都不能正确读取,但是当这个脚本执行并刷新页面时,url将像第二个超链接一样,从而使url为你所需要的工作。

注意:这不是一种安全的做事方式,可能不适合你的情况,这只是一个想法,希望能有所帮助!

谢谢。