Asp.net 如何从文本框中剥离html和word格式的文本
我有一个多行文本框,需要限制用户添加html输入,任何其他脚本,复制粘贴从word或任何其他字处理器。 但我需要允许输入项目符号 我认为这将是一件简单的事情,因为它看起来像一个常见的问题。 但是我在网上找不到好的解决方案,请帮忙。Asp.net 如何从文本框中剥离html和word格式的文本,asp.net,telerik,sitecore,Asp.net,Telerik,Sitecore,我有一个多行文本框,需要限制用户添加html输入,任何其他脚本,复制粘贴从word或任何其他字处理器。 但我需要允许输入项目符号 我认为这将是一件简单的事情,因为它看起来像一个常见的问题。 但是我在网上找不到好的解决方案,请帮忙。 我也在使用telerik工具包。我认为您可以创建一个验证规则(在/sitecore/System/Settings/Validation Rules中)。在验证运行白名单时,将允许的HTML放在白名单的某个位置(可能是Sitecore项目)。如果其中出现任何其他HTM
我也在使用telerik工具包。我认为您可以创建一个验证规则(在
/sitecore/System/Settings/Validation Rules
中)。在验证运行白名单时,将允许的HTML放在白名单的某个位置(可能是Sitecore项目)。如果其中出现任何其他HTML标记,则使其无效
这不会阻止他们将其放入,但会阻止该项目的发布
您甚至可以创建一个自定义的item:saved
事件处理程序,该处理程序除去白名单中的内容之外的所有HTML标记。同样,这并不能阻止他们放入HTML标记,但一旦项目被保存,它就会被删除更进一步,我认为也可以使用规则引擎进行此操作-演示如何使用规则引擎修改项目名称,但您可以修改它以读取特定的文本框
这里的两个选项都不会阻止用户输入HTML,但保存项目时HTML标记将自动删除。我认为您可以创建验证规则(在
/sitecore/System/Settings/Validation Rules
中)。在验证运行白名单时,将允许的HTML放在白名单的某个位置(可能是Sitecore项目)。如果其中出现任何其他HTML标记,则使其无效
这不会阻止他们将其放入,但会阻止该项目的发布
您甚至可以创建一个自定义的item:saved
事件处理程序,该处理程序除去白名单中的内容之外的所有HTML标记。同样,这并不能阻止他们放入HTML标记,但一旦项目被保存,它就会被删除更进一步,我认为也可以使用规则引擎进行此操作-演示如何使用规则引擎修改项目名称,但您可以修改它以读取特定的文本框
这里的两个选项都不会阻止用户输入HTML,但在保存项目时,HTML标记将自动删除。如果您需要删除HTML,则是您的朋友。它将处理各种形式的格式错误的html。作为奖励,它已包含在Sitecore中
如果你想使用更友好的语法,那么就考虑一下,或者两者都提供了一个来自C语言的jQuery类型语法。 如果需要建立白名单,请查看:
public void RemoveNotInWhiteList(HtmlNode pNode,IEnumerable pWhiteList)
{
如果(!pWhiteList.Contains(pNode.Name))
{
pNode.Remove();
返回;
}
pNode.Attributes
.Where(att=>!pWhiteList.Contains(att.Name))
托利斯先生()
.ForEach(att=>att.Remove());
pNode.ChildNodes
托利斯先生()
.ForEach(att=>RemoveNotInWhiteList(att,pWhiteList));
}
如果你需要去掉HTML,那么你就是你的朋友。它将处理各种形式的格式错误的html。作为奖励,它已包含在Sitecore中
如果你想使用更友好的语法,那么就考虑一下,或者两者都提供了一个来自C语言的jQuery类型语法。 如果需要建立白名单,请查看:
public void RemoveNotInWhiteList(HtmlNode pNode,IEnumerable pWhiteList)
{
如果(!pWhiteList.Contains(pNode.Name))
{
pNode.Remove();
返回;
}
pNode.Attributes
.Where(att=>!pWhiteList.Contains(att.Name))
托利斯先生()
.ForEach(att=>att.Remove());
pNode.ChildNodes
托利斯先生()
.ForEach(att=>RemoveNotInWhiteList(att,pWhiteList));
}
非常确定有关pNode.ChildNodes的部分需要递归才能覆盖整个文档。你链接的文章就是这样做的。我认为您也可以使用xpath递归地获取所有节点,但我仍在尝试。它是递归的,它使用LINQ ForEach调用方法,而不是直接调用ForEach循环,仅此而已。哇,我想我只是没有仔细阅读。我想我是在下意识地阅读att.Remove()。感谢您的解释。非常确定关于pNode.ChildNodes
的部分需要递归才能涵盖整个文档。你链接的文章就是这样做的。我认为您也可以使用xpath递归地获取所有节点,但我仍在尝试。它是递归的,它使用LINQ ForEach调用方法,而不是直接调用ForEach循环,仅此而已。哇,我想我只是没有仔细阅读。我想我是在下意识地阅读att.Remove()。谢谢你的解释。
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));
}