【问题标题】:C# UrlEncode but allow certain character setsC# UrlEncode 但允许某些字符集
【发布时间】:2012-12-27 17:04:04
【问题描述】:

我有一个应用程序,用户可以在其中上传名称可以包含非拉丁字符(例如西里尔文或中文)的文件。例如:

http://localhost/привет мир.html

然后我需要能够为非法和/或特殊字符(如空格)对文件名进行 URL 编码。当我按如下方式对 URI 进行 URL 编码时:

string uri = "http://localhost/привет мир.html";
string encoded = HttpUtility.UrlPathEncode(uri);
Console.WriteLine(encoded);

这给了我以下结果:

http://localhost/%d0%bf%d1%80%d0%b8%d0%b2%d0%b5%d1%82%20%d0%bc%d0%b8%d1%80.html

我真正想要的是:

http://localhost/привет%20мир.html

大多数浏览器都支持这种格式,我的用户(在这种情况下是俄罗斯人)需要能够以他们的语言和字符集看到更便于显示的 URL。

有没有办法对一个 URI 进行 URL 编码并且不编码某些字符集?

【问题讨论】:

  • 您是否尝试过使用特定编码的UrlEncode(string str, Encoding e) 重载?
  • @SimonMourier - 这不会做任何事情。使用的编码已经是 Unicode 编码。
  • 问题是 URL 编码意味着 URL 上的所有内容都是 ASCII ......当然西里尔字符不是。您可能需要编写自己的 URL 编码例程。
  • 我希望有一些OOB,但我有一种感觉,我必须自己写。谢谢大家的信息!

标签: c# unicode urlencode


【解决方案1】:

您需要创建自己的HttpEncoder

HttpEncoder Class - 备注部分解释了如何在HttpUtilityHttpServerUtilityHttpResponseHeader中设置您的网站以默认使用您的HttpEncoder

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    • 2010-12-09
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多