TinyMCE转换&lt; xxx&gt;进入<xxx> </xxx> - 如何阻止它?

时间:2010-04-15 04:57:27

标签: tinymce tags

我可以成功保存字符&lt;和&gt;。

我使用以下选项执行此操作:

entities : """
cleanup : false
verify_html : false

到目前为止没有任何问题。

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

&lt;xxx&gt;

转换为

<xxx></xxx>

如何阻止?我正在尝试将示例HTML输入到TinyMCE中,以便我可以记录一些XML。我必须有一种标准的做法。

2 个答案:

答案 0 :(得分:1)

这听起来很像你没有编码&lt;和&gt;字符正确。 TinyMCE是一个HTML编辑器,它编辑的内容被浏览器解析,所以没有转义&lt;和&gt;根据浏览器对格式错误的HTML的处理,内容可能会产生意外结果。

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

此致

Adrian Sutton
http://tinymce.ephox.com

答案 1 :(得分:0)

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

你必须逃避&lt;和&gt;两次,因为浏览器会将从服务器获取的数据取消一次,然后再将其交给TinyMCE。

假设您要打开一个TinyMCE WYSIWYG文本阵列,显示&#34;粗体的HTML标记是&lt; B&gt;。不存在的HTML标记是&lt; NONSENSE&gt;。&#34;

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

<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之前对源进行一次解码;你可以通过删除&#34; class = myMCE&#34;来看到这个。标记,所以你得到一个简单的html文本阵列,其中包含以下内容:

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

如果TinyMCE(在我的情况下为4)获取此数据,并且您查看&#34;工具&#34;:&#34;源代码&#34;你可以看到:

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

TinyMCE已禁止无效的html标记&#34;&lt; NONSENSE&gt;&#34;。 TinyMCE文本阵列中呈现的文本将如下所示:

粗体的HTML标记是不存在的HTML标记。

请注意第一个&#34;。&#34;现在很大胆!

服务器应发送的正确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>

,即所有&#34;&amp;&#34;被&#34;&amp; amp;&#34;取代在文本阵列的内容中。

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