【问题标题】:Nofollow on links in CKEditorNofollow on CKEditor 中的链接
【发布时间】:2011-08-03 16:47:27
【问题描述】:

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

【问题讨论】:

    标签: ckeditor nofollow


    【解决方案1】:

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

    【讨论】:

    • 谢谢,这正是我想要的。
    • 您应该将此代码添加到 instanceReady 事件的主体中。 CKEDITOR.on('instanceReady', function( ev ) { .... });
    • 我怎样才能只添加 rel="nofollow" 外部链接? @AlfonsoML
    • 我看到你已经创建了一个单独的问题并且它有正确的答案stackoverflow.com/questions/39416655/…
    【解决方案2】:

    需要包装器:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 我怎样才能只添加 rel="nofollow" 外部链接
      【解决方案4】:

      我正在使用带有 CKEditor 的 PHP Codeigniter,如果您只想为外部链接添加 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;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-10
        • 2011-03-23
        • 1970-01-01
        • 1970-01-01
        • 2011-08-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多