ASP.NET自动将&转换为&

Jak*_*ade 7 c# vb.net asp.net html-encode

小问题,但它仍然让我疯狂.

我正在构建一个<script>包含要在ASP.NET页面上呈现的标记的URL ,如下所示:

<script src='<%= string.Format("http://example.com/page.aspx?a={0}&b={1}&c={2:0.00}", A, B, C)%>' type='text/javascript'></script>
Run Code Online (Sandbox Code Playgroud)

问题是,渲染时,&字符将替换为&amp;:

<script src='http://example.com/page.aspx?a=xxx&amp;b=zzz&amp;c=123.45' type='text/javascript'></script>
Run Code Online (Sandbox Code Playgroud)

我很期待这个,显然:

<script src='http://example.com/page.aspx?a=xxx&b=zzz&c=123.45' type='text/javascript'></script>
Run Code Online (Sandbox Code Playgroud)

但是,如果我直接在<script>标签外面渲染网址,它看起来还不错!干得好

<%= string.Format("http://example.com/page.aspx?a={0}&b={1}&c={2:0.00}", A, B, C) %>
Run Code Online (Sandbox Code Playgroud)

呈现这个:

http://example.com/page.aspx?a=xxx&b=zzz&c=123.45
Run Code Online (Sandbox Code Playgroud)

是什么赋予了?我该如何制止这种疯狂?我的强迫症不能服用!

Mic*_*son 5

正如@Falkon和@AVD所说,ASP.NET会自动在<script>标签中做"正确"的事情.参见w3c建议 - C.12.在属性值(以及其他地方)中使用&符号

为了确保文档与历史HTML用户代理和基于XML的用户代理兼容,文档中用作文字字符的&符必须表示为实体引用(例如" &amp;").

我不完全确定为什么ASP.NET在页面的其余部分不会做同样的事情(可能有很多好的理由),但至少它正在纠正脚本标签中的&符号.结论:虽然您可能会诅咒ASP.NET以"扰乱"您的网址,但您可能要感谢它,以帮助您的网页符合标准.