Silverstripe HTML字段验证


Silverstripe HTML Field Validation

我想弄清楚如何让用户填写他们的"关于"字段在他们的个人资料我正在制作的网站。最大的缺点是我想让用户能够格式化他们的文本,就像你在论坛上发帖时可以格式化它一样,或者像Silverstripe用户在管理面板上可以格式化它一样。

我已经尝试使用在silverstripe的HTML字段。当我添加这个框的时候它给了你一个真正的文本框可以接受任何东西,html, javascript等等。

在我意识到两个翅膀之前,这是很好的,很酷的。对于HTML字段,没有任何形式的编辑器可供用户使用。他们不能加粗、改变字体、大小等等……另一个问题是我在那里输入了一些javascript并点击保存。当我再次打开页面时,我看到了我的javascript提醒,我输入了HTML字段。

这是我的两个问题:

我怎样才能给用户一个编辑器(任何类型的),让他们能够塑造他们的about部分

我如何验证允许您执行我在第一个问题中问的内容的字段?我对验证这样的输入很陌生,我已经搜索了很长时间,几乎没有答案。

编辑:

我忘了说我找到了这个指南:https://docs.silverstripe.org/en/3.1/developer_guides/forms/field_types/htmleditorfield/

从我在这里看到的是如何将其包含在后端(管理控制台),我不知道如何将其包含在AboutMe页面上。所以www.mywebsite.com/AboutMe/edit/1

EDIT2:

进一步的研究给了我一个解决方案,使我能够在我的页面上显示TinyMCE编辑器。我上面列出的文档并没有说缺少init函数,我需要将其添加到页面以使编辑器工作。以下是缺少的内容:

<script type="text/javascript">
tinyMCE.init({
theme : "advanced",
mode: "textareas", 
theme_advanced_toolbar_location : "top",
theme_advanced_buttons1 : "bold,italic,underline,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,outdent,indent,separator,undo,redo",
theme_advanced_buttons2 : "forecolor",
theme_advanced_buttons3 : "",
height:"250px",
width:"400px"
});
</script>
我的第二个问题仍然成立。我如何验证这里输入的所有文本?TinyMCE将通过javascript为我做一些验证,但我们总能找到一种方法。我应该做什么样的后端(php)验证来确保输入的文本是安全的?

我唯一能想到的是创建一个允许的所有字符组合的白列表,但这似乎有点太错了。

我想到了几件事。

我知道你已经走了这么远,但你可以尝试扩展HTMLEditorField和自定义字段的方式,你想用自己的TinyMCE配置。

至于验证,您可以在DataObject(或任何您要保存未处理的HTML的地方)上使用onBeforeWrite()来清理输入。可以使用库,或者如果您只是将标签列入黑名单,您可以使用PHP的strip_tags函数。