2014-09-10 112 views
1

我试图使用TinyMCE(版本4.1.2)作为WYSIWYG编辑器。登录用户可以编写他们自己的页面,并直接查看当访问者访问时页面上显示的内容。TinyMCE消毒输入

现在,我想要直接存储html。例如:

登录的用户看到This is my text!,但事实上TinyMCE将其显示为<p>This is my text!</p>。还有一些样式,如<h1>和可以添加的链接。

现在,用户可以插入超链接,给出应该显示的链接和文本。然而问题是,如果用户手动编写<a href='example.com'>Example</a>,它会在编辑器中显示,但是也会以纯html形式存储,因此显示时只会显示文本Example的超链接。

这是我的代码是如何排序的样子(左出配置):

tinymce.init({ 
    setup: function(editor){ 
     editor.on('change', function(e){ 
      $('[name="'+editor.id+'"]').next("textarea").html(editor.getContent({format: 'html'})); 
     }); 
    } 
}); 

所以从TinyMCE的字段中的文本被复制到一个<textarea>这是被保存时提交<form>内。

事情是这样的:

TinyMCE input of user

被存储为:

<h1>Title</h1> 
<p><a href="example.com">example</a></p> 
<p><a href="example.com">test</a></p> 

这让我没有办法区分真正的链接和纯文本,等以后我不能处理它存储数据。

我已经拨弄editor.getContent({format: 'html'})格式选项,如format: 'raw',但无济于事。我究竟做错了什么?

回答

1

希望我正确理解你的问题。

它看起来像你想显示任何你的用户输入,正如他们输入它没有实际处理HTML用户写入任何HTML。我对么? 我相信这个解决您所遇到的问题:

https://kokoblog.net/php/fix-tinymce-auto-convert-html-code-to-element-tag

不过,如果你只关心它的外观它的存储位置,而不是如何它看起来时,它的流程,那么你会希望将代码块添加到tinyMCE中,并确保您的用户了解他们在编写原始HTML时需要选择代码选项。

style_formats : [{title : 'Code', inline : 'code'}] 

源:Add "code" button to wordpress tinyMCE

我希望这有助于! :)

+0

谢谢,但它不是我真正想要的。编辑器中的样式代码实际上是'

Title

',这很好。但是,当用户手动编写'

标题

'时,我想要像那样原始显示它。因此,只有用户编写的内容应该像'htmlspecialchars()'一样进行处理,以防止意外关闭额外的标签并仅允许编辑器支持的标签。 – jdepypere 2014-09-10 23:26:56

+0

好的,是的,这是我的想法...在这种情况下,您需要启用代码标记格式并让您的用户使用它。由于TinyMCE所做的唯一事情就是将文本封装在HTML中,因此它无法检测是否重新包装了预格式化的HTML。这与大多数其他类似的编辑器相同,实际上很少有强制HTML代码被显示,而不是被解析。 – Ethan 2014-09-10 23:56:35

+0

我想另外一个选择是编写一个javascript扩展,它会在你正在写的时候查找html标签,如果发现一个标签,它会自动将它包装在[code] ... [/ code]段中。 – Ethan 2014-09-10 23:57:16