如何在字符串php中的某些字符后清除所有内容?

时间:2012-04-28 01:26:01

标签: php preg-replace preg-match

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

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

还有一个正在清理get和post的函数但是该函数会清除这个数组值中的所有内容,所以我留下了

httpsitesomethinganotherget_something1

有人可以在get_something=之后帮助匹配一切 并清除它或用get_something = 1替换它,类似

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

2 个答案:

答案 0 :(得分: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);

应输出(demo [updated]):

Array
(
    [0] => http://site/something/another/
    [1] => http://site/something/another2/
    [2] => http://site/something/another/
    [3] => http://site/something/another/?foo=bar
)

答案 1 :(得分:0)

如果您尝试解析网址,最好的办法是使用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
}