我正在使用PHP为我的网站编写评论系统。
我想做以下事情:
我对这样的功能有一个想法,但我需要一些经验丰富的PHP开发人员的帮助,以便我确信我正在以正确的方式做事。这是我的第一次尝试
<?php
function process_comment($comment)
{
$external_url_pattern = "href=[^mywebsite.com]"; //this regex is probably wrong (Help!)
//are there any matches
$matches = array();
preg_match_all($external_url_pattern, $comment, $matches);
foreach($matches as $match)
{
// how do we insert the 'rel="no-follow" string ?
}
}
?>
非常感谢帮助我完成此功能的任何评论,指示和提示。感谢。
答案 0 :(得分:0)
不知道这是否合适,但您也可以使用DOMDocument代替正则表达式:
$dom = new DOMDocument(); $dom->loadHTML($html); //Evaluate Anchor tag in HTML $xpath = new DOMXPath($dom); $hrefs = $xpath->evaluate("/html/body//a"); for ($i = 0; $i length; $i++) { $href = $hrefs->item($i); $url = $href->getAttribute('href'); if($url == "mywebsite.com") { $href->setAttribute("rel", "no-follow"); } } // save html $html=$dom->saveHTML(); echo $html;
希望有所帮助
答案 1 :(得分:0)
这有点棘手但会完成这项工作。
function process_comment($str)
{
//parses href attribute values into $match
if(preg_match_all('/href\=\"(.*)\"/',$str,$match))
{
foreach($match[1] as $v)
{
//check matched value contains your site as host name
//if not
//adds rel="no-follow" and replaces the link with the attribute
if(!preg_match('@^(?:http://)?(w+\.)?'.$mysite.'(.*)?@i',$v, $m))
{
$rel = $v.'" rel="no-follow';
$str = str_replace($v,$rel,$str);
}
}
}
return $str;
}
process_comment($comment);
您只需使用strstr
代替第二preg_match
即可。我使用它是因为我认为某些网址可能包含类似"http://www.external.com/url.php?v=www.mysite.com"