【发布时间】:2026-01-27 01:30:01
【问题描述】:
我使用的旧版 ASP.NET Web 应用程序具有使用查询字符串值在页面之间传递信息的 URL。我遇到了几个包含空格、数字和破折号的 URL 的问题。
这是一个 URL 示例:
http://myserver.com/SelectReport.aspx?Name=My Report&ReportFile=my_financial_report&ReportTitle=My Financial Planning Across A 1-Year Or 2-Year Outlook
URL 的问题部分是 ReportTitle 查询字符串值。
当我在 Internet Explorer 11 或 Microsoft Edge 中单击链接时,我收到 Cant' reach this page. It took too long to connect to this website. Error Code: INET_E_CONNECTION_TIMEOUT 错误。应该注意的是,如果我在 Internet Explorer 11 中打开 ON 兼容性视图设置,该链接可以正常工作。
当我在 Google Chrome 中单击该链接时,我收到“无法访问此站点。连接被重置。 ERR_CONNECTION_RESET”错误。
如果我删除2-Year 中的2,则链接有效。但是,如果我删除1-Year 中的1 并单独留下2-Year,则链接不起作用。 我想知道为什么删除2-Year 中的2 允许链接工作,但删除1-Year 中的1 却不能。无论我是否用%20 替换空格都是如此。有人知道答案吗?
我知道我可以用加号 (+) 替换 ReportTitle 查询字符串值中的空格,这样就可以了。这可能是我解决问题的方法,但我希望能更好地理解问题。
谢谢!
【问题讨论】:
-
顺便问一下查询参数应该用
&' instead of?`分隔,第一个除外。 -
我的错误@fiveelements。我会编辑帖子并修复它。
-
没关系。但是,我已经在以我的域为目标的各种浏览器中尝试了此 URL,但没有收到错误消息。
-被认为是 URL 中的安全字符。 URL 中的空格无效,因此浏览器将其替换为%20,或者您可以手动将其替换为+。两者都是一样的。你的最后两段令人困惑。你是说%20不起作用但+会起作用。请说清楚。参考这个Safe characters in URL -
在 web 应用程序中,链接是在代码中生成的。如果我将生成链接的代码中的空格替换为“%20”,发布代码,然后单击链接,页面仍然超时。如果我在代码中用“+”替换空格,发布它,然后单击链接,链接不会超时。如果
ReportTitle值包含类似1-Year or 2-Year的内容,其中一个数字后跟一个破折号,然后再跟另一个数字和一个破折号,则链接不起作用。如果我在该示例中删除了2,显示为1-Year or -Year,则链接出于某种原因有效。 -
在生成链接的代码中是否发生了某种 URL 编码/解码?请您尝试将这些 URL 放在纯静态 HTML 中并尝试(按原样使用
spaces,使用%20替换空格,并使用+替换空格)。