在CKEditor中没有后续链接

在CKEditor中没有后续链接,ckeditor,nofollow,Ckeditor,Nofollow,是否有人知道我可以在CKEditor中的何处进行设置,因此添加的所有链接都将具有rel=“nofollow”,即使用户没有指定它?您可以创建一个数据过滤器,如本页所述,该过滤器检查每个链接: 此(未经测试的)代码应该或多或少满足您的需要: editor.dataProcessor.htmlFilter.addRules( { elements : { a : function( element ) { if ( !elem

是否有人知道我可以在CKEditor中的何处进行设置,因此添加的所有链接都将具有rel=“nofollow”,即使用户没有指定它?

您可以创建一个数据过滤器,如本页所述,该过滤器检查每个链接:

此(未经测试的)代码应该或多或少满足您的需要:

editor.dataProcessor.htmlFilter.addRules(
{
    elements :
    {
        a : function( element )
        {
            if ( !element.attributes.rel )
                element.attributes.rel = 'nofollow';
        }
    }
});
需要包装器:

editor.on('instanceReady',function(){...})

将代码放在ckeditor正在加载的页面上

CKEDITOR.on('dialogDefinition', function(ev) {
      var editor = ev.editor;
      editor.dataProcessor.htmlFilter.addRules(
      {
          elements :
          {
              a : function( element )
              {
                  if ( !element.attributes.rel )
                      element.attributes.rel = 'nofollow';
              }
          }
      });
    })

我将PHP Codeigniter与CKEditor一起使用,如果您只想为外部链接添加rel=“nofollow”,则可以在将CKEditor的输出保存到数据库之前修改它。下面是我用来修改的PHP函数:

function addNofollow($content) {
    $dom = new DOMDocument();
    @$dom -> loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'));
    $x = new DOMXPath($dom);

    // Add rel="nofollow"
    foreach ($x -> query("//a") as $node) {
        $href = $node -> getAttribute("href");
        if (!strpos($href, site_base())) {
            $node -> setAttribute("rel","nofollow");
        } else {
            $node -> removeAttribute("rel");
        }
    }

    // Remove <script> tag
    $script = $dom->getElementsByTagName('script');
    $remove = [];
    foreach ($script as $item) {
      $remove[] = $item;
    }
    foreach ($remove as $item) {
      $item -> parentNode -> removeChild($item); 
    }

    $newHtml = $dom -> saveHtml($dom->getElementsByTagName('div')->item(0));
    return $newHtml;
}
函数addNofollow($content){
$dom=新的DOMDocument();
@$dom->loadHTML(mb_convert_编码($content,'HTML-ENTITIES','UTF-8');
$x=新的DOMXPath($dom);
//添加rel=“nofollow”
foreach($x->query(//a)作为$node){
$href=$node->getAttribute(“href”);
如果(!strpos($href,site_base())){
$node->setAttribute(“rel”、“nofollow”);
}否则{
$node->removeAttribute(“rel”);
}
}
//删除标签
$script=$dom->getElementsByTagName('script');
$remove=[];
foreach($script作为$item){
$remove[]=$item;
}
foreach($作为$item删除){
$item->parentNode->removeChild($item);
}
$newHtml=$dom->saveHtml($dom->getElementsByTagName('div')->item(0));
返回$newHtml;
}

谢谢,这正是我想要的。您应该将此代码添加到InstanceRady事件的主体中<代码>CKEDITOR.on('instancerady',函数(ev){..})如何仅添加rel=“nofollow”外部链接@AlfonsoMLI看到您已经创建了一个单独的问题,它有正确的答案我如何才能只添加rel=“nofollow”外部链接?