我在下面的表格中有一个网址
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函数/函数来将第一个链接转换为最后一个链接?
答案 0 :(得分:2)
您可以使用PHP的rawurlencode()
:
答案 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