PHP:如何在不编码url中的方案和主机的情况下转义url参数和路径?
PHP:如何在不编码URL中的方案和主机的情况下转义URL参数和路径: 请注意*此url只是一个示例,参数的名称可能不同于q,一些url可能有路径,而其他url可能没有路径,如下例所示。 我得到的url如下:PHP:如何在不编码url中的方案和主机的情况下转义url参数和路径?,php,url-encoding,Php,Url Encoding,PHP:如何在不编码URL中的方案和主机的情况下转义URL参数和路径: 请注意*此url只是一个示例,参数的名称可能不同于q,一些url可能有路径,而其他url可能没有路径,如下例所示。 我得到的url如下: http%3A%2F%2Fgoogle.com%2F?q=My%20Search%20Keyword 然后我应该转换为以下内容: http://google.com/?q=My%20Search%20Keyword 不是: 除此之外,还有什么简单的方法可以做到这一点吗 Url通过“ra
http%3A%2F%2Fgoogle.com%2F?q=My%20Search%20Keyword
然后我应该转换为以下内容:
http://google.com/?q=My%20Search%20Keyword
不是:
除此之外,还有什么简单的方法可以做到这一点吗
http://www.someUrl.com/?redirect=http%3A%2F%2Fgoogle.com%2F%3Fq%3DMy%20Search%20Keyword%26hl%3Den
我在其中搜索=http。。。。。然后我使用这一部分通过Curl对其进行爬网,并从这个url获取http响应代码,问题是如果不涉及上面提到的复杂过程,我无法轻松准备从一开始就发送到ECNODE的url
有更简单的方法吗?难道你不能在
上爆炸吗?
,然后将第一部分解码,然后内爆吗
$url = "http%3A%2F%2Fgoogle.com%2F?q=My%20Search%20Keyword";
$parts = explode("?", $url);
$parts[0] = rawurldecode($parts[0]);
$url = implode("?", $parts);
试试这个:
<?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);
?>
这里有一个phpfidle:我提出了以下解决方案,它可能有缺陷,但也可能帮助其他人
$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
);
你可以在?q=
上爆炸,如果这是strong中唯一的变量这只是一个例子,我正在处理数百万个不同的URL,没有一个是Google URL。我只能根据你发布的内容进行分段。好的。我添加了一个注释,这只是一个例子,一个奇怪的想法,给出一个实际的例子是的,我认为这将工作,即使Url是无参数的。。让我先试试,然后我会把它标记为正确或不正确。我投票赞成你的答案,因为它并不完全正确,但这是一种方法,其中有2个参数,两个都用&符号转义,可能是我的问题中的一个问题,更不用说所有案例显示,当从一开始就有超过1个参数时?我将更新我的问题,并尝试我的phpFiddle示例。无论有多少个参数,它都可以正常工作。对于超过1个参数,它不工作,请检查我在上面发布的更新。您的更新不清楚。最后一个url想要实现什么?使用curl对其进行爬网,以获得http响应
$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
);