【问题标题】:How to restrict the HTML tags in multiline textbox?如何限制多行文本框中的 HTML 标签?
【发布时间】:2012-06-22 11:08:02
【问题描述】:

我有一个多行文本框。我不想让用户输入 HTML 标签 或者验证可以在服务器端完成。有什么建议吗?

当我设置ValidateRequest="true" 时会抛出错误

从客户端检测到潜在危险的 Request.Form 值

这也不是必需的。我尝试通过检查字符 <kanavi and this is not a HTML tag

【问题讨论】:

    标签: c# javascript jquery asp.net


    【解决方案1】:

    设置ValidateRequest="false"

    如果输入显示消息中有标签,则在服务器上处理。

    你可以去掉标签

     Regex.Replace(source, "<.*?>", string.Empty);
    

    如果你想保留它们,你可以使用编码

    【讨论】:

    • 我不能使用我的查询中提到的ValidateRequest="false"
    • 如何使用Regex.Replace(source, "&lt;.*?&gt;", string.Empty); 删除文本。我的意思是来源可以是任何东西。
    • String mystring = Regex.Replace(myinput.Text, "<.>", string.Empty);
    • 我如何确保它只会替换正确的标签而不是
    • 这些是正确的标签。适当的标签是什么意思
    【解决方案2】:

    看看这个来自 nuget 的包。HtmlLaundry

    它应该可以帮助您在 HTML 到达服务器之前清除它。

    【讨论】:

    • 你能给我一个例子,它如何在 javascript/code 中使用它来限制用户,同时从文本框中保存 HTML 数据?
    • 抱歉,这仅在您使用 MVC 时有效。它替换了模型绑定器,并且您必须在控制器上具有 AllowHTML 属性。
    【解决方案3】:

    尝试使用正则表达式,这是为了查找 html 标签。在应用程序端使用它。

    Regex.Match(TextBox.Text, "</?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[^'">\s]+))?)+\s*|\s*)/ >");
    

    我有另一个解决方案,XDocument 总是在应用程序端。

    创建一个 XDocument 并为其设置根目录:

    XDocument yourXDocument = new XDocument(new XElement("Root"));
    

    然后加载内容:

    yourXDocument.Root = XDocument.Load(TextBox.Text);
    

    然后使用递归函数来查找您的 XDocument 中是否超过 2 个级别。

    当然,如果您只想解析 HTML 标签,我认为您必须创建一个字典来存储所有标签并将您的文本框值与每个标签进行比较。

    【讨论】:

    • 我怎样才能确保它只会替换正确的标签而不是&lt;Aelios&gt;&lt;/Aelios&gt;
    • 当然,但我认为他不想在他的请求中存储 XML 标记
    猜你喜欢
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    相关资源
    最近更新 更多