0

我正在使用脚本来检查给定页面上的链接。我正在使用简单的 html DOM 将信息解析为数组。我必须检查所有 a 标签的 href 以查找它们是否包含文件或 # 或 JS 之类的东西。

我尝试了以下但没有成功。

if(preg_match("|^(.*)|iU", $href)){
    save_link();
}

我不知道我的模式是错误的,或者是否有更好的方法来完成这个功能。

我希望能够检测 $href 是否包含 .com .php .file 扩展名。这样,它将过滤掉像 # "function()" 和 href 属性中使用的其他项目。

编辑: parse_url 将不起作用停止发布它。值 # 作为有效 url 返回,就像我在上面所说的那样,我正在尝试查找任何后跟 .* 且 .

4

3 回答 3

0

您可以使用parse_url(),如下所示:

$res = parse_url($href);
if ( $res['scheme'] == 'http' ||  $res['scheme'] == 'https'){
    //valid url
    save_link();
}

更新:
我添加了代码以仅过滤httphttps url,感谢 Baba 发现了这一点。

于 2012-10-12T19:48:15.070 回答
0

I believe that the function you're looking for is parse_url().

This function will take a URL string, and return an array of components, which will allow you to work out what kind of URL it is.

However note that it has issues with incomplete URLs in PHP versions prior to 5.4.7, so you need to have the very latest PHP to get the best out of it.

Hope that helps.

于 2012-10-12T19:51:38.230 回答
0

See http://php.net/manual/en/function.parse-url.php

I'm assuming you don't want to match fragments (#) because you are not concerned with following internal anchors.

parse_url breaks up the different parts of the url into an array. You can see the path component of the URL in this array and run your check against that.

于 2012-10-12T19:52:29.577 回答