我正在尝试替换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))
但这不起作用。任何帮助,将不胜感激。 谢谢!
答案 0 :(得分:5)
如果您只想删除&session=...
部分,那么preg_replace可能是最佳选择。那么只查看该部分并且不断言URL结构也是有意义的:
$url = preg_replace("/([?&])session=\w+(&|$)/", "$1", $url);
这个模式看起来它被两个&
包围,和/或以?
开头,和/或是字符串中的最后一个。 \w+
足以匹配会话ID字符串。
答案 1 :(得分:2)
比正则表达式稍微冗长一点,但你可以使用PHP自己的url处理函数,parse_url
,parse_str
,http_build_url
和http_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
);