我的网站符合XHTML Transitional标准,除了一件事:URL中的&(&符号)按原样写入,而不是&
也就是说,我页面中的所有网址通常都是这样的:
Foo
但是XHTML验证器会生成此错误:
不能生成一般实体"y"的系统标识符
...它希望url像这样写:
Foo
问题是IE和Firefox无法正确处理URL并忽略y参数.如何使此链接正常工作并正确验证?
在我看来,如果浏览器不能使用严格编码的XHTML URL,则无法编写XHTML页面.
你想看到行动吗?查看这两个链接之间的区别(按原样复制和粘贴它们):
http://stackoverflow.com/search?q=ff&sort=newest
和
http://stackoverflow.com/search?q=ff&sort=newest
pipTheGeek.. 56
我刚试过这个.你试图做的是正确的.在HTML中,如果您正在编写链接,则&
字符应编码为&
您只编码,&
就像%26
您希望参数值包含&符一样.我刚写了一个包含链接的简单HTML页面:Click me
它运行正常:default2.aspx
收到了预期的参数,并且源代码通过了验证.
HTML中需要&
as 的编码&
,而不是链接.当浏览器&
在HTML源代码中看到链接时,它会将其解释为&符号,链接目标将按预期进行.如果您将URL粘贴到浏览器地址栏中,则不希望它是HTML,也不会尝试解释它可能包含的任何HTML编码.这就是为什么您建议我们应该复制/粘贴到浏览器中的示例链接不起作用以及为什么我们不希望它们起作用.
如果你发布了更多的实际代码,我们可能会看到你做错了什么,但是你似乎&
在你的锚标签中使用了正确的方向.
我刚试过这个.你试图做的是正确的.在HTML中,如果您正在编写链接,则&
字符应编码为&
您只编码,&
就像%26
您希望参数值包含&符一样.我刚写了一个包含链接的简单HTML页面:Click me
它运行正常:default2.aspx
收到了预期的参数,并且源代码通过了验证.
HTML中需要&
as 的编码&
,而不是链接.当浏览器&
在HTML源代码中看到链接时,它会将其解释为&符号,链接目标将按预期进行.如果您将URL粘贴到浏览器地址栏中,则不希望它是HTML,也不会尝试解释它可能包含的任何HTML编码.这就是为什么您建议我们应该复制/粘贴到浏览器中的示例链接不起作用以及为什么我们不希望它们起作用.
如果你发布了更多的实际代码,我们可能会看到你做错了什么,但是你似乎&
在你的锚标签中使用了正确的方向.
这是我的错:超链接控件已经编码了,所以我的网址http://foo?x=1&y=2
被编码为http://foo?x=1&y=2
正如您所说,通常浏览器会正确处理网址内的& 谢谢
您可以&
在页面中使用而不是&在您的网址中.
这应该允许它被验证严格的xhtml ...
Foo
注意,如果由ASP.NET Request.QueryString函数使用,查询字符串不使用XML编码,它使用URL编码:
/mypath/mypage?b=%26stuff
所以你需要提供一个将'&'翻译成%26的函数
注意:在这种情况下,生成neetu +%26 + geetu的Server.URLEncode("neetu&geetu")不是你想要的,因为你需要将&转换为%26,而不仅仅是'&'.您必须添加应用于URLEncode结果的replace()调用,以替换'%26amp;' 由'%26'.