3

我有一个基于标签过滤文章的表单。因此,用户可以example.com/news使用发布数据访问提交要过滤的标签(例如 tag1、tag2),这将使用过滤后的文章重新加载页面,但 URL 相同。

以下网址将带回相同的文章:example.com/news/tag1+tag2

两种方法都通过同一个控制器。我想让使用表单按标签过滤的用户重定向到example.com/news/tag1+tag2url 格式。

这样做的最佳方法是什么?是否会通过搜索控制器发送所有标签过滤器请求,然后创建重定向到example.com/news/tag1+tag2

4

2 回答 2

1

似乎您不应该根据过滤标签的初始提交进行任何搜索。如果您通过一次搜索控制器然后重定向,您最终会执行两次搜索

如果用户提交标签进行过滤,则使用这些标签来构建 URL 并直接重定向到包含过滤标签的 URL。由于您说它转到同一个搜索控制器,因此随后只会启动一次正确的搜索,并且用户的 URL 已经是您想要的最终结果。

因此,只需从中检索过滤后的标签$_POST并立即重定向到触发正确搜索的最终结果 URL。

伪 PHP

$valid_tags = array_filter($_POST['tags'], function($t) {
   // validate tags as alphanumeric (substitute the appropriate regex for your tag format)
   // this discards non-matching invalid tags.
   return preg_match('/^[a-z0-9]+$/i', $t);
});
// Don't forget to validate these tags in the search controller!
// Implode the tags (assuming they are received as an array) as a space separated string
// and urlencode() it
$tags = urlencode(implode(" ", $valid_tags));
header("Location: http://example.com/news/$tags");
exit();
于 2013-01-20T21:52:13.103 回答
0
$tags = 'tag1+tag2';
header ('Location: /news/' . $tags);
exit;
于 2013-01-20T21:50:25.120 回答