0

任何 C# 方法可以转换为 HTML 字符实体字符串?

基本上,我需要对 URL 进行编码。使用 HttpUtility.UrlEncode() 我得到

http://server/sites/blank/_vti_bin/UploadService/UploadService.svc/Upload/http%3a%2f%2fserver%2fsites%2fblank%2fdoclib1%2ffile.pdf

问题是,这会导致我的服务出现“400 Bad Request”。

修复是替换%3A:等等,有意义吗?

4

2 回答 2

1

我相信编码 URL 以通过另一个 URL 传输的最佳方法是使用 Uri.EscapeDataString()。问题可能是编码字符串中的小写字母(%3a 而不是 %3A)。

var escdata = Uri.EscapeDataString(@"http://server/sites/blank/doclib1/file.pdf?test=a+b c");
//  http%3A%2F%2Fserver%2Fsites%2Fblank%2Fdoclib1%2Ffile.pdf%3Ftest%3Da%2Bb%20c

var escuris = Uri.EscapeUriString(@"http://server/sites/blank/doclib1/file.pdf?test=a+b c");
//  http://server/sites/blank/doclib1/file.pdf?test=a+b%20c

var urlencd = HttpUtility.UrlEncode(@"http://server/sites/blank/doclib1/file.pdf?test=a+b c");
//  http%3a%2f%2fserver%2fsites%2fblank%2fdoclib1%2ffile.pdf%3ftest%3da%2bb+c

var urlpenc = HttpUtility.UrlPathEncode(@"http://server/sites/blank/doclib1/file.pdf?test=a+b c");
//  http://server/sites/blank/doclib1/file.pdf?test=a+b c
于 2013-01-27T09:50:06.907 回答
0

我不知道会执行此操作的内置函数,但这是一个快速而简单的解决方案:

 string s = "http://myurl.com/whatever";

 StringBuilder sb = new StringBuilder();
 foreach (char c in s)
 {
     sb.Append(String.Format("&#x{0:X2};", (uint)c));
 }

 var result = sb.ToString();

作为使用 LINQ 的单线器:

string s = "http://myurl.com/whatever";
string result = String.Join("", s.SelectMany(c=> String.Format("&#x{0:X2};", (uint)c)).ToArray());
于 2013-01-26T14:57:53.520 回答