0

K2 は、アイテム コメント内の不要なテキストを URL に解析しています。

1. joomla管理パネルを使用してアイテムを作成し、ゲストとして次のテキストでコメントを入力しました。 xxx は URL として解析され、サブ ドメインの構文 iam.not.valid、つまり mail.yahoo.com と同様に解析されます。

  1. 上記の組み合わせ node.js では、even.though、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) の次のスニペットを使用して、いくつかのスマート インテリジェンスを使用しています。

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

誰かが正規表現を修正するのを助けることができますか? ありがとう

4

1 に答える 1

0

ユーザーがスペースのないピリオドを入力するたびに、この問題が発生します。ログインを追加して有効な TLD をテストすることもできますが、.it のようにロジックをだます TLD がたくさんあるため、それでも完璧ではありません。

正規表現の修正を試してみたい場合は、文字列が 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);
于 2012-05-16T01:51:43.430 に答える