K2 Joomla Wrong Urls在项目评论中

时间:2012-05-14 15:47:42

标签: php regex joomla2.5 joomla-k2

K2正在将不必要的文本解析为项目评论中的网址。

1.使用joomla管理面板处理项目,并作为访客使用以下文本输入评论 “node.js是一个强大的全js引擎.Enven。虽然这不是一个有效的URL它已被渲染为valid.url任何xxx.xxx被解析为url甚至像子域语法iam.not.valid即mail .yahoo.com这有多么有趣“

  1. 在上面的coomment node.js中,even.though,valid.url,xxx.xxx iam.not.valid,即mail.yahoo.com呈现为有效网址。但在这种情况下,只有mail.yahoo.com才有效。
  2. K2正在使用一些智能智能,在$ JHOME / components / com_k2 / views / item / view.html.php行(159-178)中使用以下代码段

    $comments = $model->getItemComments($item->id, $limitstart, $limit, $commentsPublished);
                    $pattern = "@\b(https?://)?(([0-9a-zA-Z_!~*'().&=+$%-]+:)?[0-9a-zA-Z_!~*'().&=+$%-]+\@)?(([0-9]{1,3}\.){3}[0-9]{1,3}|([0-9a-zA-Z_!~*'()-]+\.)*([0-9a-zA-Z][0-9a-zA-Z-]{0,61})?[0-9a-zA-Z]\.[a-zA-Z]{2,6})(:[0-9]{1,4})?((/[0-9a-zA-Z_!~*'().;?:\@&=+$,%#-]+)*/?)@";
    
                    for ($i = 0; $i < sizeof($comments); $i++) {
                        $comments[$i]->commentText = nl2br($comments[$i]->commentText);
                        $comments[$i]->commentText = preg_replace($pattern, '<a target="_blank" rel="nofollow" href="\0">\0</a>', $comments[$i]->commentText);
                        $comments[$i]->userImage = K2HelperUtilities::getAvatar($comments[$i]->userID, $comments[$i]->commentEmail, $params->get('commenterImgWidth'));
                        if ($comments[$i]->userID>0) {
                            $comments[$i]->userLink = K2HelperRoute::getUserRoute($comments[$i]->userID);
                        }
                        else {
                            $comments[$i]->userLink = $comments[$i]->commentURL;
                        }
                        if($reportSpammerFlag && $comments[$i]->userID>0) {
                            $comments[$i]->reportUserLink = JRoute::_('index.php?option=com_k2&view=comments&task=reportSpammer&id='.$comments[$i]->userID.'&format=raw');
                        }
                        else {
                            $comments[$i]->reportUserLink = false;
                        }
                    }
    

    有人可以帮助修复正则表达式吗?感谢

1 个答案:

答案 0 :(得分:0)

每当用户输入时,您就会遇到此问题。周期内没有空格。您可以添加一些登录来测试有效的TLD,但即使这样也不会很完美,因为有很多TLD会欺骗逻辑,例如.it。

如果您想尝试修复正则表达式,那么确定字符串是否为URL的模式就在这里 -

$pattern = "@\b(https?://)?(([0-9a-zA-Z_!~*'().&=+$%-]+:)?[0-9a-zA-Z_!~*'().&=+$%-]+\@)?(([0-9]{1,3}\.){3}[0-9]{1,3}|([0-9a-zA-Z_!~*'()-]+\.)*([0-9a-zA-Z][0-9a-zA-Z-]{0,61})?[0-9a-zA-Z]\.[a-zA-Z]{2,6})(:[0-9]{1,4})?((/[0-9a-zA-Z_!~*'().;?:\@&=+$,%#-]+)*/?)@";

就个人而言,我只会通过删除或注释掉此代码来完全禁用评论中的链接 -

$comments[$i]->commentText = preg_replace($pattern, '<a target="_blank" rel="nofollow" href="\0">\0</a>', $comments[$i]->commentText);