2012-07-26 54 views
1

我有一個URL的形式如下變換網址在PHP

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

當我訪問過的鍍鉻的網址,Chrome等轉換它正確地

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

現在,當我使用的file_get_contents與第一URL,它不讀取URL正確 而當我使用以下URL其確定

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

爲了將第一個鏈接轉換爲最後一個鏈接,需要使用哪些php函數/函數才能將第一個鏈接上的空間等所有特殊字符正確地轉換爲 ,就像上一個那樣?

+0

這種轉變與'  '是錯的。如果您真的想用非易碎空格字符來替換該空間,請改爲使用「0xA0」。 – Stano 2012-07-29 17:23:29

回答

0

  HTML實體更換破碎的空間更安全的選擇是與\xA0 ASCII字符來代替它。他們實際上是equalURL中的&字符被視爲參數分隔符,因此 只能導致問題。下面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