考虑以下网址列表:
1 http://www.cnn.com/international/stories/423423532
2 http://www.traderscreener.com/blah
3 http://is.gd/fsdaGdfd3
4 http://goo.gl/23V534
5 http://bit.ly/54HFD
6 http://stackoverflow.com/question/ask
我想将缩短的网址扩展为原始格式:
$headers = get_headers($URL, 1);
if (!empty($headers['Location'])) {
$headers['Location'] = (array) $headers['Location'];
$URL = array_pop($headers['Location']);
}
但是,我需要将所有网址与一系列缩短服务匹配:
$array(
'is.gd', 'bit.ly', 'goo.gl', 'wibi.us', 'tinyurl.com' // etc
)
在这种情况下,这必须过滤掉网址3,4和5.我相信最简单的方法是在***
中抓取http://***/blah
。由于我没有使用正则表达式的经验,所需的正则表达式是什么?或者有更好的方法来解决这个问题吗?
答案 0 :(得分:2)
preg_match('/^http:\/\/(is\.gd|bit\.ly|goog\.gl\|wibi\.us|tinyurl\.com)/i', $URL);
答案 1 :(得分:2)
到目前为止,最简单的方法是不建立黑名单。而是查询URL并查看它是否重定向。发送HEAD请求,并查找状态代码。如果是3xx,则会有重定向,因此您应该查找“位置”标题并将其用作新网址。
答案 2 :(得分:1)
如果您确定网址采用该格式,则可以使用explode()。
$url = "http://bit.ly/54HFD";
$tem = explode("/", $url);
$needles = array(
'is.gd', 'bit.ly', 'goo.gl', 'wibi.us', 'tinyurl.com' // etc
)
foreach($needles as $needle) {
$res = strpos($tem[2], $needle);
if ($res !== false) DO_SOMEHING
}