在php中转换网址

时间:2012-07-26 18:45:05

标签: php url character-encoding encode

我在下面的表格中有一个网址

http://www.site.com/index.php?q=foo boo

当我通过chrome访问url时,chrome将其正确转换为

http://www.site.com/index.php?q=foo%20boo

现在当我将file_get_contents与第一个url一起使用时,它并没有正确读取url 而当我使用以下网址时,确定

http://www.site.com/index.php?q=foo boo

为了将第一个链接上的所有特殊字符(如第一个链接上的空格)正确转换为 ,我应该使用哪些php函数/函数来将第一个链接转换为最后一个链接?

2 个答案:

答案 0 :(得分:2)

您可以使用PHP的rawurlencode()

http://www.php.net/manual/en/function.rawurlencode.php

答案 1 :(得分:0)

比用  HTML实体替换易碎空间更安全的选择是将其替换为\xA0 ASCII字符。它们实际上是equal&中的URL字符被视为参数分隔符,因此 只会导致问题。以下algorythm可以做你可能正在寻找的东西:

$url = 'http://www.site.com/index.php?q=foo boo&r=fii bii';
echo str_replace("\x20", "\xA0", $url);
// result: http://www.site.com/index.php?q=foo boo&r=fii bii (spaces are non-breakable)
echo str_replace("\x20", " ", $url);
// result: http://www.site.com/index.php?q=foo boo&r=fii bii

更复杂的algorythm:

echo preg_replace_callback('/[\?&]\w+=([^&]+)/', create_function(
    '$matches',
    'return str_replace("\x20", "\xA0", $matches[0]);'
  ), $url);
// result: http://www.site.com/index.php?q=foo boo&r=fii bii (spaces are non-breakable)

提取这些参数时:

$arr = parse_url($url);
parse_str($arr['query'], $arr);
var_export($arr);
// result for \xA0  : array ( 'q' => 'foo boo', 'r' => 'fii bii', )
// result for  : array ( 'q' => 'foo', 'nbsp;boo' => '', 'r' => 'fii', 'nbsp;bii' => '', ) // triple `&` in conflict