PHP:如何在不对URL中的Scheme和Host进行编码的情况下转义URL参数和路径:
请注意*此网址只是一个示例,params的名称可能与q不同,而某些网址可能包含其他网址可能没有的路径,如下例所示。
我得到的网址如下:
http%3A%2F%2Fgoogle.com%2F?q=My%20Search%20Keyword
然后我应该转换成以下内容:
http://google.com/?q=My%20Search%20Keyword
不
http://google.com/?q=My Search Keyword
除了
之外,还有一种简单的方法可以做到这一点更新
在更复杂的情况下,我得到这样的URL:
http://www.someUrl.com/?redirect=http%3A%2F%2Fgoogle.com%2F%3Fq%3DMy%20Search%20Keyword%26hl%3Den
我搜索= http .....然后我使用此部分通过Curl抓取它并从此url获取http响应代码,问题是我无法轻松准备发送ecnoded的网址从一开始就没有涉及我上面提到的复杂过程。
有更简单的方法吗?
答案 0 :(得分:1)
你不能在?
爆炸,然后rawurldecode
第一部分爆炸,然后崩溃吗?
$url = "http%3A%2F%2Fgoogle.com%2F?q=My%20Search%20Keyword";
$parts = explode("?", $url);
$parts[0] = rawurldecode($parts[0]);
$url = implode("?", $parts);
答案 1 :(得分:1)
试试这个:
<?php
$rawUrl = 'http%3A%2F%2Fgoogle.com%2F?q=My%20Search%20Keyword';
$arrDec = parse_url(urldecode($rawUrl));
$queryEnc = parse_url($rawUrl, PHP_URL_QUERY);
$newUrl = $arrDec['scheme'] . '://' . $arrDec['host'] . '?' . $queryEnc;
print_r($newUrl);
?>
这是一个phpFiddle:http://phpfiddle.org/main/code/wmi-xet
答案 2 :(得分:0)
我想出了以下解决方案,它可能有缺陷,但也可以帮助别人......
$url = rawurldecode('http%3A%2F%2Fgoogle.com%2F%3Fq%3DMy%20Search%20Keyword%26hl%3Den');
echo preg_replace_callback('#[^/\.\:&=\?]{1}#',
function($str) { return rawurlencode($str[0]);},
$url
);