代码之家  ›  专栏  ›  技术社区  ›  Petras

tinymce将&lt;xxx&gt;转换为<xxx></xxx>-如何停止?

  •  1
  • Petras  · 技术社区  · 16 年前

    我可以成功保存字符<和>。

    我使用以下选项来完成此操作:

    entities : """
    cleanup : false
    verify_html : false
    

    到目前为止没有问题。

    但是,每当我在文本之间放置任何内容时,它都会转换为标记:

    &lt;xxx&gt;
    

    转换为

    <xxx></xxx>
    

    我该怎么阻止?我正在尝试将示例html输入tinymce中,以便可以记录一些xml。我想一定有一个标准的方法。

    2 回复  |  直到 9 年前
        1
  •  1
  •   ajsutton    16 年前

    听起来很像您没有正确编码<和>字符。tinymce是一个html编辑器,它所编辑的内容由浏览器解析,因此在内容中包含未转义的<和>可能会基于浏览器对格式错误的html的处理而产生意外的结果。

    请注意,根据加载要编辑的html的方式,浏览器可能会在实体到达tinymce之前对其进行一次解码,在这种情况下,必须对实体进行双重编码才能安全加载。

    当做,

    阿德里安·萨顿
    http://tinymce.ephox.com

        2
  •  0
  •   Peter Steier    9 年前

    我基本上详细阐述了Ajsutton的答案,这是为我的需要解决问题的起点。

    您必须对<和>进行两次转义,因为浏览器在将数据移交给tinymce之前,会对从服务器获取的数据进行一次转义。

    假设要打开一个tinymce wysiwyg文本数组,其中显示“黑体的html标记是<b>。不存在的HTML标记是<无意义>“

    假设服务器发送以下页源:

    <script language="javascript" type="text/javascript">
    tinyMCE.init({
            selector : "textarea.myMCE",
            ...
            });
    </script>
    
    ...
    
    <TEXTAREA NAME="TEST" class="myMCE" ROWS="25" COLS="80">
    The HTML tag for boldface is <CODE>&lt;B&gt;.</CODE>
    A nonexistent HTML tag is <CODE>&lt;NONSENSE&gt;.</CODE>
    </TEXTAREA>
    

    这会失败的。浏览器(在我的例子中是firefox)在将源代码发送到tinymce之前对其进行一次解码;您可以通过删除“class=mymce”标记来看到这一点,这样就可以得到包含以下内容的纯html文本数组:

    The HTML tag for boldface is <CODE><B>.</CODE>
    A nonexistent HTML tag is <CODE><NONSENSE>.</CODE>
    

    如果tinymce(在我的例子中是4)得到了这些数据,并且您查看了“工具”:“源代码”,您可以看到:

    The HTML tag for boldface is <CODE><B>.</CODE>
    A nonexistent HTML tag is <CODE>.</CODE>
    

    tinymce抑制了无效的html标记“<无意义>”。tinymce textarray中呈现的文本将如下所示:

    黑体字的html标记是 . 不存在的HTML标记是。

    请注意第一个“.”现在是粗体的!

    服务器应发送的正确HTML源是:

    <TEXTAREA NAME="TEST" class="myMCE" ROWS="25" COLS="80">
    The HTML tag for boldface is <CODE>&amp;lt;B&amp;gt;.</CODE>
    A nonexistent HTML tag is <CODE>&amp;lt;NONSENSE&amp;gt;.</CODE>
    </TEXTAREA>
    

    也就是说,文本数组内容中的所有“&”都替换为“&amp;”。

    如何实现这一点取决于用于cgi脚本的编程语言。在php中,str_replace(“&”、“&amp;”、$textarrea_contents)应该可以工作。