2012-05-14 2 views
0

K2가 항목 설명에서 불필요한 텍스트를 URL로 구문 분석합니다.K2 Joomla 항목 설명의 URL이 잘못되었습니다.

1. 사용자가 joomla admin 패널을 사용하여 항목을 작성했으며 다음 텍스트가 포함 된 설명을 입력했습니다. "node.js는 유효한 full js 엔진입니다. 유효한 것으로 보이지는 않지만 유효한 것으로 보입니다. xxx.xxx와 URL 아무것도, URL을 같은, 심지어 하위 도메인 구문 iam.not.valid 즉 mail.yahoo.com이 even.though, "위의 coomment의 Node.js를에서

  1. 얼마나 재미 같은 구문 분석 valid.url, xxx.xxx iam.not.valid 즉, mail.yahoo.com은 유효한 URL로 렌더링됩니다. 이 경우 mail.yahoo.com 만 유효합니다.

K2

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

누군가가 위의 고정 도와 드릴까요/구성 요소/com_k2 /보기/아이템/view.html.php 라인 (159-178)

$ JHOME에 다음 코드를 사용하여 일부 스마트 정보를 사용 정규식? 감사합니다

답변

0

주위에 공백없이 사용자가 입력 할 때마다이 문제가 발생합니다. 유효한 TLD를 테스트하기 위해 로그인을 추가 할 수는 있지만 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);