在包含的文件上使用REQUEST_URI在URL中重复

时间:2013-03-07 09:43:02

标签: php url

我有一个内容<div>,其中我根据$_GET值包含不同的PHP文件...例如,我有/index.php?type=foo&action=bar。我试图包含一个PHP文件,其中包含一些表数据和简单的分页,如下所示

$paginate .= "<a href='$target&page=$prevPage'>previous page</a>";

$target = $_SERVER[ 'REQUEST_URI' ];。它的工作原理我想要它的例外,每次我去下一页/上一页时,URL都会重复。例如: /index.php?type=foo&action=bar&page=2&page=3&page=4&page=3&page=2等等......使用$_SERVER["PHP_SELF"]让我回到\index.php而没有额外的$_GET参数

我意识到为什么会这样,但有一个很好的解决方法吗?

2 个答案:

答案 0 :(得分:0)

试试这个:

$target = $_SERVER[ 'REQUEST_URI' ];
$target = preg_replace('/&page=\d*/',"",$target);
$paginate .= "<a href='$target&page=$prevPage'>previous page</a>";

最好给出页面名称:

更改:

$target = $_SERVER[ 'REQUEST_URI' ];

致:

$target = 'your_page.php';

答案 1 :(得分:0)

请注意,使用用户输入创建URI可能是一个安全问题。

在我看来,您必须将请求解码为例如数组。然后,您可以编辑值并创建新的查询字符串。

$cur = $_GET;
$cur['page'] = 7;
$new = array();
foreach ($cur as $key=>$val) {
  // Possily you need to remove magic quotes, here
  $new[] = url_encode($key).'='.url_encode($val);
}
$target = 'index.php?'.implode('&', $new);

我还建议使用固定文件名。使用$ _SERVER [“PHP_SELF”]仅在脚本名称可能更改时才有意义。通常,情况并非如此。

还要考虑从$ _GET或$ _REQUEST中收集预先指定的变量。这避免了一些安全问题。