2012-05-14 31 views
0

K2在商品評論中將不需要的文本解析爲網址。K2 Joomla錯誤商品評論的網址

1.使用joomla管理面板創建一個項目,並作爲一個客人輸入了以下文字的註釋 「node.js是一個功能完整的js引擎Enven。雖然這不是一個有效的url,但它已被渲染爲有效。與xxx.xxx任何URL解析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不是有效的。

K2是使用在$ JHOME /組件/ com_k2 /視圖/項目/ 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; 
        } 
       } 

有人可以幫上面固定使用下面的代碼片段一些聰明智慧正則表達式?謝謝

回答

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);