0

我的 Web 程序在尝试访问 C# 程序后面的代码中的文件时出错,该代码在目录名和文件名之间有一个反斜杠。该文件的地址进入我的网页,查询值为“deaths\bakerd.htm”。但是,浏览器会将其转换为“deaths%08akerd.htm”。

网页中的网址为

 'http://localhost:57602/obitm.aspx?url=deaths%08akerd.htm' 

并说找不到网页,但网页obitm.aspx确实存在,为什么它会说它不存在?

如果我在 Windows 资源管理器中手动将查询值的值更改为“deaths/bakerd.htm”,它在作为查询值进入浏览器时不会进行任何转换,并且我可以在我的 C# 程序中访问该文件.

我尝试使用更改javascript中的查询值

   thisurl = url.replace("\\", "/") 

但这并没有改变任何东西。

我没有在我的 C# 程序中尝试过任何转换。那么如何以编程方式将“\”更改为“/”?我不知道为什么会发生这种情况并且非常混乱。任何帮助表示赞赏。

4

4 回答 4

5

只是将 URL 字符串中的 \ 转换为 / 对您不起作用,因为在这种情况下,“\b”被转换为退格字符,该字符被编码为 %08 - 这是 ASCII 等价物的十六进制值退格字符。

要解决此问题,您可以将“%08”转换为字符串“/B”,但是对于各种字符有很多HTML 代码,您尝试这些代码既不高效也不有趣。

你从哪里得到包含文件名的原始字符串?如果它是您可以控制的,那么在您读取文件的路径/名称时以及在将其以 URL 传递给 Web 应用程序之前,将“\”转换为“/”。

您还可以在发送路径之前对路径进行 HTMLEncode,以便字符串变为

http://localhost:57602/obitm.aspx?url=deaths%92Bakerd.htm' 
于 2013-10-07T05:40:34.643 回答
2

尝试通过以 @ 符号为前缀来使用逐字字符串

string url = @"http://localhost:57602/obitm.aspx?url=deaths\bakerd.htm".Replace("\\","/").ToString();
于 2013-10-07T05:53:50.600 回答
0

尝试thisurl = url.Replace("\\", "/"); 就像在 javascript 中一样。

于 2013-10-07T05:22:34.373 回答
0

要解析查询字符串参数,您可以使用:

NameValueCollection qscoll = HttpUtility.ParseQueryString(querystring);

这里是我们的 MSDN 帮助

或者您可以:

HttpUtility.UrlEncode(Request.QueryString["url"]);
于 2013-10-07T05:57:14.613 回答