K2 Joomla Неправильные URL-адреса в комментариях к элементу

K2 разбирает ненужный текст в URL-адреса в комментариях к элементу.

1.Создал элемент с помощью панели администратора joomla и в качестве гостя ввел комментарий со следующим текстом: «node.js — это мощный полноценный js-движок. Enven. Хотя это недействительный 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;
                    }
                }

Может ли кто-нибудь помочь исправить регулярное выражение выше? Спасибо


person springpress    schedule 14.05.2012    source источник


Ответы (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_!~*'().;?:\@&=+$,%#-]+)*/?)@";

Лично я бы просто вообще отключил ссылки в комментариях, удалив или закомментировав этот код -

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