K2正在将不必要的文本解析为项目评论中的网址。
1.使用joomla管理面板处理项目,并作为访客使用以下文本输入评论 “node.js是一个强大的全js引擎.Enven。虽然这不是一个有效的URL它已被渲染为valid.url任何xxx.xxx被解析为url甚至像子域语法iam.not.valid即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;
}
}
有人可以帮助修复正则表达式吗?感谢
答案 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);