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