我有一个多行文本框,需要限制用户添加html输入,任何其他脚本,从word或任何其他文字处理器复制粘贴。 但是我需要允许输入子弹。
我认为这样做很简单,因为它看起来像是一个常见的问题。 但我无法在网上找到一个好的解决方案,请帮忙。 我也在使用telerik工具包。
答案 0 :(得分:4)
如果你需要删除HTML,那么HTML Agility Pack就是你的朋友。它将处理各种格式错误的HTML。作为奖励,它已经包含在Sitecore中。
如果你想使用更友好的语法,那么考虑CSQuery或Fizzler,它们都会在C#中为你提供jQuery类型的语法。
如果您需要构建白名单,请查看this post on how to add whitelist:
public void RemoveNotInWhiteList(HtmlNode pNode, IEnumerable<string> pWhiteList)
{
if (!pWhiteList.Contains(pNode.Name))
{
pNode.Remove();
return;
}
pNode.Attributes
.Where(att => !pWhiteList.Contains(att.Name))
.ToList()
.ForEach(att => att.Remove());
pNode.ChildNodes
.ToList()
.ForEach(att => RemoveNotInWhiteList(att, pWhiteList));
}
答案 1 :(得分:1)
我估计你可以创建一个验证规则(在/sitecore/System/Settings/Validation Rules
中)。在验证通过该白名单运行时,将允许的HTML放在某个地方的白名单中(可能是Sitecore项)。如果其中出现任何其他HTML标记,请将其设置为无效。
这并不能阻止他们将其放入,但它会阻止该项目的发布。
您甚至可以创建一个自定义item:saved
事件处理程序,除了列入白名单的内容之外,它还会删除所有HTML标记。同样,它不会阻止他们放入HTML标记,但是一旦项目被保存,它将被删除。
更进一步,我认为也可以使用规则引擎 - this article by John West显示如何使用规则引擎修改项目名称,但您可以将其修改为读出特定的文本框。
这里的任何一个选项都不会阻止用户输入HTML,但保存项目时会自动删除HTML标记。