Asp.net 如何从文本框中剥离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

我有一个多行文本框,需要限制用户添加html输入,任何其他脚本,复制粘贴从word或任何其他字处理器。 但我需要允许输入项目符号

我认为这将是一件简单的事情,因为它看起来像一个常见的问题。 但是我在网上找不到好的解决方案,请帮忙。
我也在使用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));
}