Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:如何在不编码url中的方案和主机的情况下转义url参数和路径?_Php_Url Encoding - Fatal编程技术网

PHP:如何在不编码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

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通过“rawurldecode”解码整个Url
  • “parse_url”将其拆分为方案、域、路径和查询
  • 使用Parse_str解析查询并仅转义值
  • 重新生成查询字符串
  • 重新生成url
  • 上述所有步骤也需要检查空值
  • 更新

    在更复杂的情况下,我得到如下URL:

    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
    );