2

我几乎没有什么功能可以清理 get 和 post 中的所有内容,但是这个必须更具体一些,我有一个生成链接的数组,例如

array(
  1 => http://site/something/another/?get_something=1
  2 => http://site/something/another2/?get_something=1
)

还有一个清理 get 和 post 的函数,但该函数会清除这个数组值中的所有内容,所以我只剩下

httpssitesomethinganotherget_something1

有人可以帮忙匹配之后get_something= 的所有内容并清除它或用 get_something=1 替换它,比如

$clear = preg_match('/^[A-Za-z0-9]+$/', $array[1]);
preg_replace("/get_something=".$clear."/i","",$array[1]);
4

2 回答 2

1

你应该使用parse_url,但这里是一个正则表达式实现,以防你好奇:

$urls = array
(
    'http://site/something/another/?get_something=1',
    'http://site/something/another2/?get_something=1',
    'http://site/something/another/?get_something=1&foo=bar',
    'http://site/something/another/?foo=bar&get_something=1',
);

$urls = preg_replace('~[?&]get_something=.*$~i', '', $urls);

print_r($urls);

应该输出(演示[更新]):

Array
(
    [0] => http://site/something/another/
    [1] => http://site/something/another2/
    [2] => http://site/something/another/
    [3] => http://site/something/another/?foo=bar
)
于 2012-04-28T02:29:01.777 回答
0

如果您尝试解析 URL,最好的办法是使用parse_url,删除不需要的查询元素,然后使用http_build_url. 这是我的做法:

for($i = 0; $i < count($linkArray); $i++) {
    // get original link and parse it
    $link = parse_url($linkArray[$i]);

    // replace the query portion
    $link["query"] = "get_something=1";

    // build the new URL
    $linkArray[$i] = $link["scheme"] . "://" . $link["hostname"] . $link["path"] . "?" . $link["query"] . "#" . $link["fragment"]

    // done
}
于 2012-04-28T01:37:53.167 回答