2012-04-28 109 views
2

我有消毒一切GET和POST,但是这一次一定要更具体一点几的功能,我有一个是生产像如何清除字符串php中的某些字符后的所有内容?

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

链接阵列也有是消毒,得到了功能和职位,但该所以我留下功能会从该数组值清除一切

httpsitesomethinganotherget_something1

能有人帮get_something= 之后匹配的一切,清除或get_something = 1替换它,所以mething像

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

所以你想删除或替换'='后面的所有内容吗? – Sampson 2012-04-28 01:27:45

+0

@Jonahtan Samplson在get_something = – Benn 2012-04-28 01:29:54

+4

之后如何使用parse_url()解析url并清理“query”数组值? – 2012-04-28 01:30:08

回答

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 
) 
+0

这个人也清理一切还/get_something=(.*)/ – Benn 2012-04-28 17:28:26

+0

@Benn:哦,我的印象是,你想删除关于'get_something'参数*的一切*。要删除所有内容,它更简单,请检查我的编辑。 – 2012-04-28 17:48:15

+0

完美谢谢! – Benn 2012-04-28 19:19:42

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 
} 
+0

不能使用PECL – Benn 2012-04-28 01:47:42

+0

@Benn我已经删除了'http_build_url'调用,它需要PECL。这个版本不够健壮,但它应该适合你的需求。 – 2012-04-28 01:59:07

相关问题