Nofollow在CKEditor中的链接

时间:2011-08-03 16:47:28

标签: ckeditor nofollow

有没有人知道我可以设置CKEditor的位置,所以添加的所有链接都会有rel =“nofollow”,即使用户没有指定它?

4 个答案:

答案 0 :(得分:7)

您可以按照本页中的说明创建数据过滤器,以检查每个链接: http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Data_Processor

这个(未经测试的)代码应该或多或少地符合您的需要:

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

答案 1 :(得分:0)

需要包装:

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

答案 2 :(得分:0)

将代码放在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';
              }
          }
      });
    })

答案 3 :(得分:0)

我正在使用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;
}