小问题,但它仍然让我疯狂.
我正在为< script>构建一个url标记包含要在ASP.NET页面上呈现,如下所示:
<script src='<%= string.Format("http://example.com/page.aspx?a={0}&b={1}&c={2:0.00}",A,B,C)%>' type='text/javascript'></script>
问题是何时呈现,&字符替换为& amp;:
<script src='http://example.com/page.aspx?a=xxx&b=zzz&c=123.45' type='text/javascript'></script>
我很期待这个,显然:
<script src='http://example.com/page.aspx?a=xxx&b=zzz&c=123.45' type='text/javascript'></script>
但是,如果我直接渲染网址,则在< script>之外标签,看起来还不错!干得好
<%= string.Format("http://example.com/page.aspx?a={0}&b={1}&c={2:0.00}",C) %>
呈现这个:
http://example.com/page.aspx?a=xxx&b=zzz&c=123.45
是什么赋予了?我该如何制止这种疯狂?我的强迫症不能服用!
解决方法
正如@Falkon和@AVD所说,ASP.NET在< script>中自动执行“正确”的操作.标签.请参阅w3c建议 –
C.12. Using Ampersands in Attribute Values (and Elsewhere)
In order to ensure that documents are compatible with historical HTML user agents and XML-based user agents,ampersands used in a document that are to be treated as literal characters must be expressed themselves as an entity reference (e.g. “
&
“).
我不完全确定为什么ASP.NET在页面的其余部分不会做同样的事情(可能有很多好的理由),但至少它正在纠正脚本标记中的&符号.结论:虽然您可能正在诅咒ASP.NET以“扰乱”您的网址,但您可能要感谢它,而不是帮助您的网页符合标准.