0

HTML文字エンティティ文字列に変換するC#メソッドはありますか?

基本的に、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 に答える