2015-04-27 35 views
4

我有这个无效的链接硬编码的软件,我不能修改。我怎样才能删除无效查询字符串使用PHP头位置

http://www.16start.com/results.php?cof=GALT:#FFFFFF;GL:1;DIV:#FFFFFF;FORID:1&q=search

我想用PHP头位置重定向到不包含查询字符串有效的URL。我想只传递参数q =。

我已经试过

$q = $_GET['q']; 
header ("Location: http://www.newURL.com/results.php?" . $q . ""); 

但它只是传递了无效的查询字符串到新的位置,除了在一种奇怪的方式

此修改是目标位置我得到的,这也是无效

http://www.newURL.com/results.php?#FFFFFF;GL:1;DIV:#FFFFFF;FORID:1&q=search

+0

看起来像查询字符串有很多东西,然后变量产生奇怪的行为。尝试使用$ _SERVER数组来获取查询字符串,然后在q = – leitning

+0

之后子串字符串什么是syntex以使用$ _SERVER –

回答

0

一种方法可能是使用strstr()来获取字符串中的所有内容(包括q=)。

所以:

$q=strstr($_GET['q'],'q='); 

给一个抡

+0

将子字符串捕获到会话变量中您可以给我准确的syntex吗?即时通讯不是很好在PHP –

1

这是因为#被看作是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。

+0

您好wouter。 q =是动态的。所以我必须从当前的URL创建一个会话变量。而这并不奏效。 str_replace在查询字符串中找到的第一个“#”之后根本不分析任何东西。 –

+0

我不认为我可以遵循。但在你的问题中,我看到你试图使用'$ _GET',所以我猜用户正在浏览那个不正确的URL(而不是将它作为PHP脚本中的变量),这是正确的吗? –

+0

是的。用户浏览到该网址。在该网址的登陆页面中,我想将他重定向到一个正确的URL –