簡體   English   中英

K2 Joomla錯誤在項目評論中提示

[英]K2 Joomla Wrong Urls in item comments

K2正在將不必要的文本解析為項目注釋中的url。

1.使用joomla管理控制台創建了一個項目,並作為來賓輸入了以下文本作為注釋:“ node.js是強大的功能強大的js引擎。Enven。盡管這不是有效的url,但已被渲染為有效的url。 xxx被解析為url,甚至像子域語法iam.not.valid(即mail.yahoo.com)一樣被解析為“多么有趣”。

  1. 在以上示例的node.js中,盡管有效的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)

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

有人可以幫忙解決上面的正則表達式嗎? 謝謝

每當用戶在句點中沒有空格的情況下鍵入內容時,都會遇到此問題。 您可以添加一些登錄信息以測試有效的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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM