Vra

Ek probeer om 'n Windows kliënt aansoek wat 'n webwerf vir data oproepe skryf. Om te verseker dat die installasie van 'n minimum Ek probeer net gebruik dlls in die NET Framework kliënt Profiel . Die probleem is dat ek nodig het om te UrlEncode sommige parameters, is daar 'n maklike manier om dit te doen sonder die invoer van SYSTEM.WEB.DLL wat nie deel is van die kliënt Skep indeks?

Was dit nuttig?

Oplossing

System.Uri.EscapeUriString() kan problematies met sekere karakters wees, vir my was dit 'n aantal / pond '# 'n teken in die tou.

As dit is 'n kwessie vir jou, probeer:

System.Uri.EscapeDataString() //Works excellent with individual values

Hier is 'n SO vraag antwoord dat die verskil verduidelik:

Wat is die verskil tussen EscapeUriString en EscapeDataString?

en beveel om gebruik te maak Uri.EscapeDataString() in enige aspek.

Ander wenke

In Net 4.5+ gebruik WebUtility

Net vir opmaak ek hierdie indiening as 'n antwoord.

Kan nie vind enige goeie voorbeelde te vergelyk so:

string testString = "http://test# space 123/text?var=val&another=two";
Console.WriteLine("UrlEncode:         " + System.Web.HttpUtility.UrlEncode(testString));
Console.WriteLine("EscapeUriString:   " + Uri.EscapeUriString(testString));
Console.WriteLine("EscapeDataString:  " + Uri.EscapeDataString(testString));
Console.WriteLine("EscapeDataReplace: " + Uri.EscapeDataString(testString).Replace("%20", "+"));

Console.WriteLine("HtmlEncode:        " + System.Web.HttpUtility.HtmlEncode(testString));
Console.WriteLine("UrlPathEncode:     " + System.Web.HttpUtility.UrlPathEncode(testString));

//.Net 4.0+
Console.WriteLine("WebUtility.HtmlEncode: " + WebUtility.HtmlEncode(testString));
//.Net 4.5+
Console.WriteLine("WebUtility.UrlEncode:  " + WebUtility.UrlEncode(testString));

Uitsette:

UrlEncode:             http%3a%2f%2ftest%23+space+123%2ftext%3fvar%3dval%26another%3dtwo
EscapeUriString:       http://test#%20space%20123/text?var=val&another=two
EscapeDataString:      http%3A%2F%2Ftest%23%20space%20123%2Ftext%3Fvar%3Dval%26another%3Dtwo
EscapeDataReplace:     http%3A%2F%2Ftest%23+space+123%2Ftext%3Fvar%3Dval%26another%3Dtwo

HtmlEncode:            http://test# space 123/text?var=val&another=two
UrlPathEncode:         http://test#%20space%20123/text?var=val&another=two

//.Net 4.0+
WebUtility.HtmlEncode: http://test# space 123/text?var=val&another=two
//.Net 4.5+
WebUtility.UrlEncode:  http%3A%2F%2Ftest%23+space+123%2Ftext%3Fvar%3Dval%26another%3Dtwo

In Net 4.5+ gebruik WebUtility .UrlEncode

Dit lyk te herhaal HttpUtility.UrlEncode (pre-v4.0) vir die meer algemene karakters:
Uri.EscapeDataString(testString).Replace("%20", "+").Replace("'", "%27").Replace("~", "%7E")
Nota:. EscapeUriString sal 'n geldige uri string, wat veroorsaak dat dit te gebruik as baie plat karakters as moontlik te hou

Sien hierdie antwoord vir 'n Table Vergelyk die verskillende enkoderings:
https://stackoverflow.com/a/11236038/555798

Line Trips Almal van hulle gelys hier (behalwe HttpUtility.HtmlEncode) sal "\n\r" omskep in %0a%0d of %0A%0D

Neem asseblief die vrymoedigheid om wysig hierdie en nuwe karakters by te voeg aan my toets string, of laat hulle in die kommentaar en ek sal dit verander.

Die antwoorde hier is baie goed, maar nog steeds onvoldoende vir my.

Ek het 'n klein lus dat Uri.EscapeUriString vergelyk met Uri.EscapeDataString vir al die karakters 0-255.

NOTA:. Beide funksies het die ingeboude intelligensie wat karakters bo 0x80 is eerste UTF-8 geïnkripteer en dan persent geïnkripteer

Hier is die resultaat:

******* Different *******

'#' -> Uri "#" Data "%23"
'$' -> Uri "$" Data "%24"
'&' -> Uri "&" Data "%26"
'+' -> Uri "+" Data "%2B"
',' -> Uri "," Data "%2C"
'/' -> Uri "/" Data "%2F"
':' -> Uri ":" Data "%3A"
';' -> Uri ";" Data "%3B"
'=' -> Uri "=" Data "%3D"
'?' -> Uri "?" Data "%3F"
'@' -> Uri "@" Data "%40"


******* Not escaped *******

'!' -> Uri "!" Data "!"
''' -> Uri "'" Data "'"
'(' -> Uri "(" Data "("
')' -> Uri ")" Data ")"
'*' -> Uri "*" Data "*"
'-' -> Uri "-" Data "-"
'.' -> Uri "." Data "."
'_' -> Uri "_" Data "_"
'~' -> Uri "~" Data "~"

'0' -> Uri "0" Data "0"
.....
'9' -> Uri "9" Data "9"

'A' -> Uri "A" Data "A"
......
'Z' -> Uri "Z" Data "Z"

'a' -> Uri "a" Data "a"
.....
'z' -> Uri "z" Data "z"

******* UTF 8 *******

.....
'Ò' -> Uri "%C3%92" Data "%C3%92"
'Ó' -> Uri "%C3%93" Data "%C3%93"
'Ô' -> Uri "%C3%94" Data "%C3%94"
'Õ' -> Uri "%C3%95" Data "%C3%95"
'Ö' -> Uri "%C3%96" Data "%C3%96"
.....

EscapeUriString is om gebruik te word om enkodeer URLs, terwyl EscapeDataString is om gebruik te word om enkodeer byvoorbeeld die inhoud van 'n koekie, want Cookie data moet nie bevat die gereserveerde karakters '=' en ';'.

Daar is 'n kliënt profiel bruikbare weergawe, System.Net.WebUtility klas, teenwoordig in kliëntprofiel System.dll. Hier is die MSDN Link:

WebUtility

Hier is 'n voorbeeld van die stuur van 'n POST versoek dat behoorlik kodeer parameters met behulp van tipe application/x-www-form-urlencoded inhoud:

using (var client = new WebClient())
{
    var values = new NameValueCollection
    {
        { "param1", "value1" },
        { "param2", "value2" },
    };
    var result = client.UploadValues("http://foo.com", values);
}

Om UrlEncode sonder die gebruik van System.Web:

String s = System.Net.WebUtility.UrlEncode(str);
//fix some different between WebUtility.UrlEncode and HttpUtility.UrlEncode
s = Regex.Replace(s, "(%[0-9A-F]{2})", c => c.Value.ToLowerInvariant());

meer besonderhede: https: //www.samnoble Co.uk. / 2014/05/21 / pasop-webutility-urlencode-vs-httputility-urlencode /

System.Net.WebUtility.HtmlDecode
Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top