gpt4 book ai didi

c# - 为什么使用相同的 HtmlDecode() 函数会得到不同的结果?

转载 作者:行者123 更新时间:2023-11-28 04:40:20 25 4
gpt4 key购买 nike

这是我的代码:

string myText = "Wählen Sie bitte";
string myTextDecoded = HttpUtility.HtmlDecode(myText);
Response.Write(myTextDecoded);
ddAdulti.Items.Add(new ListItem(myTextDecoded, ""));

在第一种情况下(Response.Write)它打印在我的 html 文档上:

Wählen Sie bitte

这是正确的!但是在选择框的选项上,它打印在我的 html 文档上:

Wählen Sie bitte

这是错误的(我已经解码了...使用相同的函数)。

为什么会出现这种行为?

最佳答案

根据您更新后的问题,我将对您的理解做出一个可能不正确的假设。

我猜您正在查看 HTML 源代码,但不理解为什么字符串在一处编码而另一处未编码。解释相当简单:服务器端控件自动编码其内容,而 Response.Write 写入原始输出。这是有原因的:服务器端控件通常包含用户输入,这在本质上是不安全的,因此它会自动编码以防止 cross-site scripting attacks ,或者在不太邪恶的情况下,用户输入只会破坏您的页面。

举例来说,想象一下如果列表没有对内容进行编码而您这样做了:

ddAdulti.Items.Add(new ListItem("</select>", ""));
ddAdulti.Items.Add(new ListItem("An actual valid value", ""));

最终结果是您的标记看起来像这样:

<select>
<option></select></option>
<option>An actual valid value</option>
</select>

如您所见,这显然已损坏。您最终得到的结果取决于解释浏览器,但很可能是一个空的下拉列表。

现在,由于控件确实对其内容进行编码,因此标记最终为:

<select>
<option>&lt;/select&gt;</option>
<option>An actual valid value</option>
</select>

一切顺利。 :-)

[编辑]

我突然想到,从我的示例中,您可能不清楚为什么您会看到像“ä”这样的字符的行为。这是因为许多字符编码 不支持变音字母,因此对于控件编写者来说,简单地对 7 位 ASCII 字符集之外的所有字符进行编码可能是最简单的。 :-)

[编辑 2]

我越来越清楚原来的帖子实际上并没有描述真正的问题。显然,markzzz 试图做的是从数据库中获取未编码的 HTML 并将其按原样显示给客户端。已经存在用于执行此操作的 WebForms 控件:LiteralControl。它会显示你插入其中的任何内容,未编码。

就是说,我不知道如何将它嵌入到 DropDownList 中——请参阅我对呈现的 HTML 将如何中断的解释。但是,如果您只想显示项目列表,而不一定是下拉列表,您可以在 Repeater 或类似的东西中使用 LiteralControl

关于c# - 为什么使用相同的 HtmlDecode() 函数会得到不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9035736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com