C#string.Split()匹配两个斜杠?

时间:2010-04-05 18:20:13

标签: c# .net string

我有一个用C#编写的.NET 3.5 Web应用程序做一些包含文件路径的URL重写,我遇到了问题。当我拨打string.Split('/')时,它会同时匹配'/'和'\'字符。那......应该发生吗?我认为它会注意到ASCII值不同并跳过它,但看起来我错了。

// url = 'someserver.com/user/token/files\subdir\file.jpg
string[] buffer = url.Split('/');

上面的代码为string[]提供了6个元素......这看起来很直观。有没有办法强制Split()只匹配正斜杠?现在我很幸运,因为有问题的斜杠在URL的末尾,我可以连接string[]中的其余元素,但这对我们正在做的事情来说是很多工作,并且不是解决潜在问题的好方法。

之前有人碰到过吗?有一个简单的答案?我很感激!

更多代码:

url = HttpContext.Current.Request.Path.Replace("http://", "");
string[] buffer = url.Split('/');

事实证明,Request.Path和Request.RawUrl都在改变我的斜线,这很荒谬。所以,是时候研究一下了,并弄清楚如何从不破坏格式的函数中获取URL。谢谢大家一起玩疯狂,抱歉这是一个误导性的问题!

6 个答案:

答案 0 :(得分:7)

当我尝试以下操作时:

string url = @"someserver.com/user/token/files\subdir\file.jpg";
string[] buffer = url.Split('/');
Console.WriteLine(buffer.Length);

...我得到4.发布更多代码。

答案 1 :(得分:1)

发生了其他事情,粘贴了更多代码。

string str = "a\\b/c\\d";
string[] ts = str.Split('/');
foreach (string t in ts)
{
    Console.WriteLine(t);
}

输出

a\b
c\d

就像它应该的那样。 我的猜测是你正在转换/进入\某处。

答案 2 :(得分:0)

您可以使用正则表达式将所有\ sshlash转换为临时字符,在/上拆分,然后将临时字符重新映射回\。屁股疼痛,但有一种选择。

答案 3 :(得分:0)

我怀疑(没有看到整个应用程序)问题在于URL中路径分隔符的语义。听起来您正在尝试将语义值附加到应用程序中的反斜杠,这与HTTP协议定义和使用反斜杠的方式相反。

当然,这只是猜测。

解决此问题的最佳方法可能是修改应用程序以其他方式对路径进行编码(例如,对于反斜杠,可能是“%5C”)。

答案 4 :(得分:0)

这两个函数可能是转换为/因为\不是URL中的有效字符(请参阅Which characters make a URL invalid?)。浏览器(不是C#,正如你推断的那样)假设当你使用那个无效字符时,你的意思是/,所以它正在为你“修复”它。如果您希望在URL中使用\,则需要先对其进行编码。

浏览器本身实际上是在请求中进行更改的浏览器,即使它是在幕后。要验证这一点,只需打开fiddler并查看当您转到此类URL时实际发送的URL。 IE和Chrome实际上将\改变为浏览器本身的URL字段中的\,FireFox没有,但无论如何请求都会通过这种方式。

答案 5 :(得分:-1)

<强>更新
怎么样:

Regex.Split(url, "/");