解析URL和http_build_query中的闭括号,并在封闭括号中插入数字

时间:2015-12-02 14:34:31

标签: php parsing urldecode

可能没有正确解释这一点,但我们走了。

我的网址看起来像http://www.test.co.uk/?page=2&area[]=thing&area[]=thing2

可以通过网站上的链接从URL添加或删除多个“区域”。在每次添加n“区域”时,我想删除URL的“页面”部分。所以它可以重置为page1。我使用parse_url取出那个位。

然后我构建了一个http查询,这样就可以在没有“page”的情况下正确生成URL

这导致“area%5B0%5D =”“area%5B1%5D =”而不是“area [] =”

当我使用urldecode时,现在显示“area [0] =”和“area [1] =”

我需要它是“[]”,因为当使用链接删除某个区域时,它会检查“[] =” - 当它为[0]时它无法识别它。如何将其保留为“[] =”?

见下面的代码。

  $currentURL = currentURL();

    $parts = parse_url($currentURL);
   parse_str($parts['query'], $query);
   unset($query['page']);
   $currenturlfinal = http_build_query($query);
 urldecode($currenturlfinal);
  $currentURL = "?" . urldecode($currenturlfinal);

这就是我到目前为止所做的 - 它修复了URL中的视觉部分 - 但我认为我没有解决任何问题,因为我意识到代表'area'和'thing'的东西不是根据我认为根据下面的代码解析或重新编码url,我认为是$ key或$ val。所以我仍然无法使用链接删除“区域”

  $currentURL_with_QS2 = currentURL();

   $parts = parse_url($currentURL_with_QS2);
   parse_str($parts['query'], $query);
   unset($query['page']);
   $currenturlfinal = http_build_query($query);

   $currenturlfinal = preg_replace('/%5B[0-9]+%5D/simU', '[]', $currenturlfinal);
   urldecode($currenturlfinal);

   $currentURL_with_QS = "?" . $currenturlfinal;


   $numQueries = count(explode('&', $_SERVER['QUERY_STRING']));

   $get = $_GET;



    if (activeCat($val)) { // if this category is already set

        $searchString = $key . '[]= ' . $val; // we build the query string to remove

我正在使用Wordpress,我可以添加 - 也许有一种方法可以通过Wordpress重置分页。当然,即便如此 - 当我在任何页面上转到第2页时,它仍将“[]”更改为“5b0%5d”等....

编辑:这是一个函数的一部分,它引用了$ key(区域/类别)和$ val(区域或类别的名称),它在链接本身中被回显

EDIT2:现在有效!
我不知道为什么,但我不得不使用原始代码并进行我之前做过的调整,现在它的工作方式正是我想要的!然而,之后我看不出两个代码中有任何明显的差异。奇怪...

1 个答案:

答案 0 :(得分:0)

据我所知,没有内置的方法可以做到这一点。 您可以尝试:

$currenturlfinal = http_build_query($query);

其中$query是没有区域参数的查询字符串部分,然后是:

foreach ($areas as $area) {
    $currenturlfinal .= '&area[]='.$area;
}

UPD:
你可以试试:

    $query = preg_replace('/%5B[0-9]+%5D/simU', '%5B%5D', $query);

http_build_query致电后立即放置。

相关问题