代码之家  ›  专栏  ›  技术社区  ›  Daniel Szalay

使用ckeditor setdata函数时管理引号

  •  0
  • Daniel Szalay  · 技术社区  · 15 年前

    我想用PHP打印一个表,每行都有一个按钮,用于将其内容(HTML代码)加载到ckeditor实例中。

     $column = '<td><a href="#" onclick="CKEDITOR.instances.editor.setData(' . "'" . $HTMLcode . "');" . '">Load</a></td>';
     echo $column;
    

    由于CSS样式的原因,HTML代码也包含引号:

    <p style='text-align: center;'>
    

    我得到了这个结果,很明显它破坏了代码:

    <a href="#" onclick="CKEDITOR.instances.editor.setData('<p style='text-align: center;'>Great.</p>');">Load</a> 
    

    有解决办法吗?任何帮助都将不胜感激! 丹尼尔,提前谢谢你。

    3 回复  |  直到 15 年前
        1
  •  1
  •   Pekka    15 年前

    常见的解决方案是 htmlentities() :

    $column = '<td><a href="#" onclick="CKEDITOR.instances.editor.setData(' 
             . "'" . htmlentities($HTMLcode, ENT_QUOTES) . "');" . '">Load</a></td>';
    

    还有 addslashes() 这将使字符串在JavaScript中可解析。

    返回一个字符串,该字符串的反斜杠位于需要在数据库查询等中引用的字符之前。这些字符包括单引号(“)、双引号(“)、反斜杠()和nul(空字节)。

    之所以选择htmlentities()而不是addslashes(),是因为在有效的HTML文档中,不能有原始的和号 & . 他们需要像 &amp; 即使在javascript语句中 当它们没有被封闭在 CDATA 标签。

        2
  •  1
  •   Community Marino Di Clemente    7 年前

    你所要做的就是 escape the quote characters 在传递给setdata函数的字符串中。

        3
  •  1
  •   Pascal MARTIN    15 年前

    基本上,您在一个字符串中有一些引号,并希望它们被转义。

    我想,解决办法应该是使用 addslashes :

    $HTMLcode = "<p style='text-align: center;'>";
    $column = '<td><a href="#" onclick="CKEDITOR.instances.editor.setData(' . "'" 
                . addslashes($HTMLcode) . "');" 
                . '">Load</a></td>';
    echo $column;
    

    您将得到以下HTML代码:

    <td><a href="#" onclick="CKEDITOR.instances.editor.setData('<p style=\'text-align: center;\'>');">Load</a></td>
    

    即,传递到的字符串中的引号 CKEDITOR.instances.editor.setData 逃走了。