这是因为#
被看作是fragment identifier的开始和干扰分析器。
您可以采取简单的方式,建议使用Stretch,但您应该知道q
是您网址中的最后一个查询参数。因此,它可能是更好的解决该URL和更安全的方式提取出查询参数:
<?php
$url = "http://www.16start.com/results.php?cof=GALT:#FFFFFF;GL:1;DIV:#FFFFFF;FORID:1&q=search";
// Replace # with its HTML entity:
$url = str_replace('#', "%23", $url);
// Extract the query part from the URL
$query = parse_url($url, PHP_URL_QUERY);
// From here on you could prepend the new url
$newUrl = "http://www.newURL.com/results.php?" . $query;
var_dump($newUrl);
// Or you can even go further and convert the query part into an array
parse_str($query, $params);
var_dump($params);
?>
输出
string 'http://www.newURL.com/results.php?cof=GALT:%23FFFFFF;GL:1;DIV:%23FFFFFF;FORID:1&q=search' (length=88)
array
'cof' => string 'GALT:#FFFFFF;GL:1;DIV:#FFFFFF;FORID:1' (length=37)
'q' => string 'search' (length=6)
更新
您的意见后,似乎该URL在您的脚本中不可用为string
,并且您想从浏览器中获取该URL。
坏消息是PHP不会收到片段部分(#之后的所有内容),因为它不会发送到服务器。如果您在浏览器的开发工具中检查网络选项卡,则可以验证此项。F12。
在这种情况下,您必须在http://www.16start.com/results.php
上托管一个页面,其中包含一些用于解析片段并重定向用户的客户端JavaScript。
看起来像查询字符串有很多东西,然后变量产生奇怪的行为。尝试使用$ _SERVER数组来获取查询字符串,然后在q = – leitning
之后子串字符串什么是syntex以使用$ _SERVER –