Nofollow CKEditor 中的链接

发布于 2024-11-27 21:02:42 字数 75 浏览 2 评论 0原文

有谁知道我可以在 CKEditor 中的哪个位置进行设置,因此添加的所有链接都将具有 rel="nofollow",即使用户没有指定它?

Does anyone know where in CKEditor I can setup, so all links added will have rel="nofollow", even if the users don't specify it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

红墙和绿瓦 2024-12-04 21:02:42

您可以按照本页中的说明创建一个数据过滤器来检查每个链接:
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';
        }
    }
});

You can create a data filter as explained in this page that checks every link:
http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Data_Processor

This (untested) code should be more or less what you need:

editor.dataProcessor.htmlFilter.addRules(
{
    elements :
    {
        a : function( element )
        {
            if ( !element.attributes.rel )
                element.attributes.rel = 'nofollow';
        }
    }
});
孤独患者 2024-12-04 21:02:42

需要包装:

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

Need wrapper:

editor.on('instanceReady',function(){...})
丘比特射中我 2024-12-04 21:02:42

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

Put the code on page where ckeditor is loading

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';
              }
          }
      });
    })
狼性发作 2024-12-04 21:02:42

我将 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;
}

I'm using PHP Codeigniter with CKEditor and if you want to add rel="nofollow" only for external links you can modify the output of CKEditor before save it to database. Here the PHP function I use to modify:

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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文