2015-04-27 68 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 –