使用CKEditor setData函数时管理引号

时间:2010-02-20 16:41:46

标签: php javascript ckeditor quotes

我想在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 个答案:

答案 0 :(得分:1)

常见的解决方案是htmlentities()

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

还有addslashes(),它应该使字符串在JavaScript中可解析。

  

在数据库查询等中需要引用的字符之前返回带反斜杠的字符串。这些字符是单引号('),双引号(“),反斜杠()和NUL(NULL字节)。

在addslashes()上选择htmlentities()的意思是,在有效的HTML文档中,必须没有原始的&符号&。他们需要在&amp; 中转义为CDATA ,即使在JavaScript语句中,如果这些内容未包含在{{1}}标记中。

答案 1 :(得分:1)

您要传递给setData函数的字符串中只需要escape the quote characters

答案 2 :(得分:1)

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

我想,解决方案是使用类似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的字符串中的引号将被转义。