我想我可能在Uri.IsWellFormedUriString方法中发现了一个错误,可能是因为它只符合RFC 2396和RFC 2732标准,而不是新的RFC 3986,这使得前面提到的两个过时了.
我认为发生的是任何非us-ascii字符都会使它失败,所以带有æ,ø,ö或å等字符的url会使它返回false.由于现在允许这些类型的字符(维基百科和其他人使用它们),我认为Uri.IsWellFormedUriString应该接受它们.下面的正则表达式取自RFC 3986.
你怎么看?Uri课程应该更新吗?
无论如何这里是一些显示错误的示例代码:
static void Main(string[] args)
{
var urls = new []
{
@"/aaa/bbb/cccd",
@"/aaa/bbb/cccæ",
@"/aaa/bbb/cccø",
@"/aaa/bbb/cccå"
};
var regex = new Regex(@"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?");
Debug.WriteLine("");
foreach (var url in urls)
{
if (Uri.IsWellFormedUriString(url, UriKind.Relative))
Debug.WriteLine(url + " is a wellformed Uri");
if (regex.IsMatch(url))
Debug.WriteLine(url + " passed the Regex");
Debug.WriteLine("");
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
/aaa/bbb/cccd is a wellformed Uri
/aaa/bbb/cccd passed the Regex
/aaa/bbb/cccæ passed the Regex
/aaa/bbb/cccø passed the Regex
/aaa/bbb/cccå passed the Regex
Run Code Online (Sandbox Code Playgroud)
Osk*_*lin 12
您必须更改配置以支持RFC 3986和RFC 3987.这是您必须进行的配置:
<configuration>
<uri>
<idn enabled="All" />
<iriParsing enabled="true" />
</uri>
</configuration>
Run Code Online (Sandbox Code Playgroud)
从这里取http://msdn.microsoft.com/en-us/library/system.uri.aspx#CodeSnippetContainerCode5
| 归档时间: |
|
| 查看次数: |
4148 次 |
| 最近记录: |