C# HttpUtility.HtmlDecode让我抓狂

C# HttpUtility.HtmlDecode让我抓狂,c#,html-encode,C#,Html Encode,这种情况快把我逼疯了!!:以下代码段不起作用(我应该这样做) 第一行将一个值(例如,“b虚拟值:/b分配到preResult中(这是预期的) 但是下一行再次给出相同的值!!!但是它应该返回“Dummy value:” 调试这些行时,我想将值直接复制并粘贴到HttpUtility.HtmlDecode()中,猜猜看……它起作用了!!!我得到了预期的值 当然这没用,但它证明了一些奇怪的事情正在发生…什么 有人再次面临同样的情况吗?(dev.env.VS2008、.NET3.5SP1)如果值作为b伪值

这种情况快把我逼疯了!!:以下代码段不起作用(我应该这样做)

第一行将一个值(例如,
“b虚拟值:/b
分配到preResult中(这是预期的)

但是下一行再次给出相同的值!!!但是它应该返回“Dummy value:”

调试这些行时,我想将值直接复制并粘贴到HttpUtility.HtmlDecode()中,猜猜看……它起作用了!!!我得到了预期的值

当然这没用,但它证明了一些奇怪的事情正在发生…什么


有人再次面临同样的情况吗?(dev.env.VS2008、.NET3.5SP1)

如果值作为
b伪值:/b存储在XML文件中,则获取InnerText将自动对文本进行HtmlDecode。无需调用HtmlDecode。

如果值作为
b伪值:/b存储在XML文件中,则获取InnerText将自动对文本进行HtmlDecode编码。没有需要调用HtmlDecode。

使用
InnerHtml
而不是
InnerText

这对我很有用:

aDiv.InnerHtml = HttpUtility.HtmlDecode(aString);

我使用它在网页上显示格式化文本。

使用
InnerHtml
而不是
InnerText

这对我很有用:

aDiv.InnerHtml = HttpUtility.HtmlDecode(aString);
我用它在网页上显示格式化文本。

未公开的“第一行赋值”步骤是罪魁祸首。根据使用的内容,赋值将被双重编码

// .Dump() is a helper "display" method in LinqPad .Net snippet compiler. 
// Replace with Console.Write(

var na = GetCreateXmlNode("a");

na.InnerText = "<b> Dummy value: </ b>";

na.InnerXml.Dump();
System.Web.HttpUtility.HtmlDecode(na.InnerXml).Dump();
na.InnerText.Dump();
System.Web.HttpUtility.HtmlDecode(na.InnerText).Dump(); // <- Must double-Decode

na.InnerXml = "&lt;b&gt; Dummy value: &lt;/ b&gt;";

na.InnerXml.Dump();
System.Web.HttpUtility.HtmlDecode(na.InnerXml).Dump(); // <- or this if you want appearance of "parity"
na.InnerText.Dump(); // <- just use this
System.Web.HttpUtility.HtmlDecode(na.InnerText).Dump();
/.Dump()是LinqPad.Net代码段编译器中的帮助程序“显示”方法。
//替换为控制台(
var na=GetCreateXmlNode(“a”);
na.InnerText=“b虚拟值:/b”;
na.InnerXml.Dump();
System.Web.HttpUtility.HtmlDecode(na.InnerXml.Dump();
na.InnerText.Dump();
System.Web.HttpUtility.HtmlCode(na.InnerText).Dump();//未公开的“第一行赋值”步骤是罪魁祸首。根据使用的内容,赋值将被双重编码

// .Dump() is a helper "display" method in LinqPad .Net snippet compiler. 
// Replace with Console.Write(

var na = GetCreateXmlNode("a");

na.InnerText = "&lt;b&gt; Dummy value: &lt;/ b&gt;";

na.InnerXml.Dump();
System.Web.HttpUtility.HtmlDecode(na.InnerXml).Dump();
na.InnerText.Dump();
System.Web.HttpUtility.HtmlDecode(na.InnerText).Dump(); // <- Must double-Decode

na.InnerXml = "&lt;b&gt; Dummy value: &lt;/ b&gt;";

na.InnerXml.Dump();
System.Web.HttpUtility.HtmlDecode(na.InnerXml).Dump(); // <- or this if you want appearance of "parity"
na.InnerText.Dump(); // <- just use this
System.Web.HttpUtility.HtmlDecode(na.InnerText).Dump();
/.Dump()是LinqPad.Net代码段编译器中的帮助程序“显示”方法。
//替换为控制台(
var na=GetCreateXmlNode(“a”);
na.InnerText=“b虚拟值:/b”;
na.InnerXml.Dump();
System.Web.HttpUtility.HtmlDecode(na.InnerXml.Dump();
na.InnerText.Dump();

System.Web.HttpUtility.HtmlDecode(na.InnerText).Dump();//这听起来很奇怪。作为调试建议,请将
preResult
与预期值(
b..
)进行比较在调试窗口中的两行之间。如果没有帮助,请逐字节进行比较。@Heinzi:我没有时间深入研究,所以我放弃了,并提出了一个更优雅的解决方案(与此特定问题无关)。但是谢谢你的建议!这听起来很奇怪。作为调试建议,请将
preResult
与预期值(
b…
)进行比较在调试窗口中的两行之间。如果没有帮助,请逐字节进行比较。@Heinzi:我没有时间深入研究,所以我放弃了,并提出了一个更优雅的解决方案(与此特定问题无关)。但是谢谢你的建议!我也这么想!但我想我们不对!InnerText只返回这个字符串,其他什么都没有!我在XML节点中运行了这个代码,使用InnerText检索了它,并对它进行了调试。文本的Writeline显示格式正确。你想把它放到网页上吗?我就是这么想的没错!但我猜我们错了!InnerText只返回这个字符串,其他什么都没有!我在XML节点中使用该代码运行了这个,使用InnerText检索了它,并对文本进行了调试。Writeline显示格式正确。是否要将其放在网页上?
na.InnerText = "<b> Dummy value: </ b>";

na.InnerXml.Dump();
System.Web.HttpUtility.HtmlDecode(na.InnerXml).Dump();
na.InnerText.Dump(); // <- Just use that to get Decoded string.
System.Web.HttpUtility.HtmlDecode(na.InnerText).Dump();

&lt;b&gt; Dummy value: &lt;/ b&gt;  // raw xml contents
<b> Dummy value: </ b> // single-encoding, single-decoding, but too messy.
<b> Dummy value: </ b> // single-encoding, single-decoding
<b> Dummy value: </ b> // single-encoding, double-decoding