【问题标题】:K2 Joomla Wrong Urls in item commentsK2 Joomla 项目评论中的错误网址
【发布时间】:2012-05-22 03:14:36
【问题描述】:

K2 正在将不必要的文本解析为项目 cmets 中的 url。

1.使用 joomla 管理面板创建一个项目,并作为访客输入以下文本的评论 “node.js 是一个强大的 js 引擎。Enven.虽然这不是一个有效的 url,但它已被呈现为 valid.url 任何带有 xxx.xxx 的东西都被解析为 url,甚至像子域语法 iam.not.valid 即邮件.yahoo.com 这太有趣了”

  1. 在上面的注释 node.js 中,即使,valid.url,xxx.xxx iam.not.valid 即 mail.yahoo.com 被呈现为有效 url。但在这种情况下,只有 mail.yahoo.com 有效,其他无效。

K2 在 $JHOME/components/com_k2/views/item/view.html.php 行 (159-178) 中使用以下 sn-p 使用一些智能智能

$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;
                    }
                }

有人可以帮忙修复上面的正则表达式吗?谢谢

【问题讨论】:

    标签: php regex joomla2.5 joomla-k2


    【解决方案1】:

    用户在任何时候键入时都会遇到这个问题。在一个没有空格的时间段内。您可以添加一些登录信息来测试有效的 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_!~*'().;?:\@&=+$,%#-]+)*/?)@";
    

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

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

    【讨论】:

      猜你喜欢
      • 2013-02-02
      • 2012-03-07
      • 2015-04-07
      • 2016-11-16
      • 2013-07-14
      • 2013-03-12
      • 2011-11-30
      • 2012-05-21
      • 2013-08-06
      相关资源
      最近更新 更多