作为Adding Values to a Query String in a URL的延续,我有一个搜索框,可以为当前网址添加其他参数。
http://example.com/?s=original+new+arguments&fq=category
表单代码如下所示:
<form id="FilterSearch" method="get" action="http://example.com/search_result.php">
其中search_result.php只是我创建的一个新页面,用于使用新网址解析提交和重定向。
如何将原始网址传递给search_result.php,以便我可以操作网址?
编辑#1 :我添加了一个隐藏的输入:
<?php $current_url = $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; ?>
<input type="hidden" name="current_url" value="<?php $current_url; ?>" />
<input name="send" id="send" type="submit" value="Search" />
我的输出只是将参数添加到提交页面(search_result.php)而不是预期的查询页面。
<?php
if (isset($_GET['send'])){
$searchField = urlencode($_GET['SearchField']);
$location = $_GET['current_url'];
$location = preg_replace($location, '/([?&]s=)([^&]+)/', '$1$2+'.$searchField);
header('Location: '.$location);
}
?>
我要么错误地传递错误,要么两次都错了!
编辑#2 :输出网址如下:
http://example.com/wp-content/themes/child_theme/search_result.php?SearchField=newTerm¤t_url=www.example.com%2F%3Fs%3DoldTerm%26searchsubmit%3D&send=Search
编辑#3 我回应了输出网址,这是正确的。我摆脱了preg_match只是为了看看我在处理表单时是否可以获得相同的URL。有趣的是,我找不到一个页面。我决定添加 http:// 标题并且它有效:
header('Location: http://'.$location);
因此,我认为这里唯一不对的是preg_replace。
答案 0 :(得分:9)
我认为你正在寻找隐藏的输入。
这样的事情:
<input type="hidden" name="current_url" value="(Current URL here)" />
然后像访问任何其他$ _GET或$ _POST参数一样访问它。
编辑以回复编辑:
你可以echo $location; die;
在这一行之后:
$location = $_GET['current_url'];
让我知道输出是什么?这将告诉我们它是否被错误地传递或处理不正确。
答案 1 :(得分:2)
只需在$_SERVER['HTTP_REFERER']
中使用search_result.php
即可。另一个选择是使用隐藏输入,但我会选择第一个。
答案 2 :(得分:0)
获取当前URl的更好方法是创建隐藏输入,并且传递当前URL并捕获服务器端。即
<input type="hidden" name="cur_url" value="(your Current URL here)" />