如何使用php标头位置

时间:2015-04-27 17:16:21

标签: 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

2 个答案:

答案 0 :(得分: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)

<强>更新

发表评论后,您的脚本中的网址似乎无法作为string提供,您希望从浏览器中获取该网址。

坏消息是PHP不会收到片段部分(#之后的所有内容),因为它不会发送到服务器。如果您在浏览器的开发工具 F12 中选中网络选项卡,则可以验证这一点。

在这种情况下,您必须在http://www.16start.com/results.php上托管一个页面,其中包含一些客户端JavaScript,用于解析片段并重定向用户。

答案 1 :(得分:0)

一种方法是使用strstr()将所有内容(包括q=)放入字符串中。

所以:

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

给那个旋转