包含参数的特定URL的preg_replace

时间:2011-09-21 20:56:42

标签: php preg-replace

我正在尝试替换URL列表的会话ID#

Ex:http://www.yes.com/index.php?session=e4bce57bc39f67bebde0284f4c2ed9ba&id=1234

我正试图摆脱session=e4bce57bc39f67bebde0284f4c2ed9ba位并保留http://www.yes.com/index.php?id=1234位。

我正在尝试使用:

preg_replace('&\bhttp://www\.yes\.com/(?:index\.php(?:\?id(?:=[]\d!"#$%\'()*+,./:;<=>?@[\\\\_`a-z{|}~^-]*+)?&i', $subject, $regs)) 

但这不起作用。任何帮助,将不胜感激。 谢谢!

2 个答案:

答案 0 :(得分:5)

如果您只想删除&session=...部分,那么preg_replace可能是最佳选择。那么只查看该部分并且不断言URL结构也是有意义的:

$url = preg_replace("/([?&])session=\w+(&|$)/", "$1", $url);

这个模式看起来它被两个&包围,和/或以?开头,和/或是字符串中的最后一个。 \w+足以匹配会话ID字符串。

答案 1 :(得分:2)

比正则表达式稍微冗长一点,但你可以使用PHP自己的url处理函数,parse_urlparse_strhttp_build_urlhttp_build_query

// Parse the url to constituent parts
$url_parts = parse_url($_REQUEST);

// Parse query string to $params array
parse_str($url_parts['query'], $params);

// Get rid of the session param
unset($params['session']);

// Rebuild query part of the url without the session val
$url_parts['query'] = http_build_query($params);

// Rebuild the url using http_build_url
$cleaned_url = http_build_url(
    "http://www.example.com"
    , $url_parts
);