将数组中的所有相对URL更改为绝对URL

时间:2013-04-10 15:57:56

标签: php regex

我有一个包含一些相对网址(file.html)和绝对网址(http://website.com/index.html)的数组。

我正在尝试将它们转换为绝对网址。

所以,我所做的就是遍历数组并检查URL是否是绝对的。如果是,则将其添加到仅包含绝对URL的新数组中。

如果它不是绝对URL,我从当前URL获取域名并将其连接到相对URL;因此,将其设为绝对URL,然后将其添加到仅包含绝对URL的数组中。

但是,当我浏览绝对URL数组时,我注意到了一些相对的URL。

我做错了什么?

foreach($anchors as $anchor){
    if(preg_match('/(?:https?:\/\/|www)[^\'\" ]*/i', (string)($anchor))){
        //has absolute URL
       //add to array
       array_push($matchList, (string)($anchor));
    }
    else{
        //has relative URL
        //change to absolute
        //add to array
        $urlPrefix = preg_match('/(?:https?:\/\/|www)[^\/]*/i', $url);
        $absolute = (string)(((string)$urlPrefix).((string)($anchor)));
        array_push($matchList, $absolute);
    }
}

1 个答案:

答案 0 :(得分:1)

这不是preg_match()的工作方式(它不会返回它匹配的内容,它在没有匹配时返回0,如果匹配则返回1):

$urlPrefix = preg_match('/(?:https?:\/\/|www)[^\/]*/i', $url);

你需要这样做:

preg_match('/(?:https?:\/\/|www)[^\/]*/i', $url, $matches);

urlPrefix  = $matches[0];

请参阅preg_match()