2013-02-20 11 views
5

Czy istnieje metoda dekodowania łańcucha zakodowanego za pomocą HttpUtility.JavaScriptStringEncode() w języku C#?Jak odkodować ciąg zakodowany za pomocą JavaScriptStringEncoded?

Przykład zakodowany ciąg:

<div class=\"header\"><h2>\u00FC<\/h2><script>\n<\/script>\n 

Moje tymczasowe rozwiązanie:

public static string JavaScriptStringDecode(string source) 
{ 
    // Replace some chars. 
    var decoded = source.Replace(@"\'", "'") 
       .Replace(@"\""", @"""") 
       .Replace(@"\/", "/") 
       .Replace(@"\t", "\t") 
       .Replace(@"\n", "\n"); 

    // Replace unicode escaped text. 
    var rx = new Regex(@"\\[uU]([0-9A-F]{4})"); 

    decoded = rx.Replace(decoded, match => ((char)Int32.Parse(match.Value.Substring(2), NumberStyles.HexNumber)) 
              .ToString(CultureInfo.InvariantCulture)); 

    return decoded; 
} 

Odpowiedz

0

Nie, trzeba by realizować to samemu. Powodem jest to, że nie ma żadnego zamierzonego użycia takiej metody! Do czego prawdopodobnie chce osiągnąć, dlaczego nie wystarczy użyć

HttpServerUtility.HtmlEncode(...) 

i

HttpServerUtility.HtmlDecode(...) 
+0

Przeznaczeniem jest analizator treści WWW. Nie jestem właścicielem treści. –

+3

Brak zamierzonego użycia? Żartujesz, prawda? – misteraidan

0

można użyć

HttpUtility.UrlDecode 

http://msdn.microsoft.com/en-us/library/system.web.httputility.urldecode(v=vs.110).aspx

odpowiedział również tutaj: Unescape JavaScript's escape() using C#

Ale UrlDecode ma pewne znaczące ograniczenia wokół pewnych znaków (jak znaki +, które javascript nie unescape) i dowolne wartości znaków> = 128. Używanie Microsoft.JScript.GlobalObject.unescape jest prawdopodobnie najbardziej wiarygodnym, ale ja nie " t wiedzą, jak dobrze to działa (np jaki jest język bazowy. Wyobrażam sobie, że jest szybki, biorąc pod uwagę, że jest to lib w tym momencie).

Powiązane problemy