【问题标题】:How to force html to not parse xml string into text input?如何强制 html 不将 xml 字符串解析为文本输入?
【发布时间】:2014-01-07 12:39:59
【问题描述】:

我有以下代码:

<ItemTemplate>
    <asp:TextBox ID="TextBox2" runat="server" Height="162px" ReadOnly="True" 
        Text='<%# Eval("XMLResponse")%>'   TextMode="MultiLine" Width="447px">
    </asp:TextBox>
</ItemTemplate>

这会从数据库返回一个 xml 字符串并将其显示在输入中,问题是由于某种原因它会解析此 xml 以确保它是有效的,但通常不是(我无法控制该xml的生成)。如果 xml 有效,则上述代码可以完美运行,如果不是,则出现以下错误:

“=”字符,十六进制值 0x3D,不能包含在名称中。第 1 行,位置 13

我已经弄清楚,在这种特殊情况下(但情况会改变),这是因为 xml 是这样开始的:

?xmlversion='1.0'?

而不是这样:

?xml 版本="1.0" ?

如果我使用 HttpUtility.HtmlEncode 它将它加载到文本框中没有问题,但是 xml 格式显然不正确。我确信有一些简单的方法可以强制它不解析 xml,但我似乎无法在网上找到它。非常感谢您的帮助!

【问题讨论】:

  • 如何使用 Html 编码
  • 嗨,谢谢 Murali,但如果你重读我的最后一段,你就会明白为什么它不是正确的解决方案。

标签: html asp.net xml itemtemplate


【解决方案1】:

我找到了一个解决方案,以防其他人遇到同样的、非常令人沮丧的问题。答案是在数据库输出上使用 HttpUtility.JavaScriptStringEncode(在我的例子中是 XMLResponse),然后使用 RegEx 对生成的 UTF-8 字符串进行解码,如下所示:

    $(window).load(function () {
        var x = $("#TextBox2").val();
        var r = /\\u([\d\w]{4})/gi;
        x = x.replace(r, function (match, grp) {
            return String.fromCharCode(parseInt(grp, 16));
        });
        x = unescape(x);
        $("#TextBox2").val(x);
    });

我使用此处找到的答案来获取 RegEx 的帮助:

How do I decode a string with escaped unicode?

【讨论】:

  • 顺便说一句,在使用 HtmlEncode 之后,我确实首先尝试在 JavaScript 中解码(我尝试过的数百种解决方案之一),但这会丢失一些格式,因此无法正确解码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
  • 2013-06-23
  • 1970-01-01
  • 1970-01-01
  • 2017-04-02
相关资源
最近更新 更多