簡體   English   中英

如何使用php標頭位置刪除無效的querystring

[英]How can I remove invalid querystring using php header location

我使用無法修改的軟件對這個無效鏈接進行了硬編碼。

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

這是因為#被看作是片段標識符的開始,並混淆了解析器。

您可以按照Stretch所建議的那樣輕松地進行操作,但應注意q是URL中的最后一個查詢參數。 因此,以更安全的方式修復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使用,您想從瀏覽器中獲取它。

壞消息是PHP將不會收到片段部分(#之后的所有內容),因為它不會發送到服務器。 如果您在瀏覽器F12的“開發”工具中選中“網絡”選項卡,則可以驗證這一點。

在這種情況下,您必須在http://www.16start.com/results.php上托管一個頁面,其中包含一些客戶端JavaScript,用於解析片段和重定向用戶。

一種方法是使用strstr()獲取字符串中的所有內容(包括q= )。

所以:

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

旋轉一下

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM