2016-04-22 11 views
0

Das ist mein Unicode-String >Flucht Akzente HtmlEntity als Hex

desastres

Die obige String müssen HTML-Entity (Hex) als

Désastres

umgewandelt werden

Unten ist der Code, es konvertiert die Zeichenfolge in HTML-Eniry aber in Dezimal.

Kann mir jemand helfen, das gewünschte Ergebnis zu bekommen?

static string EscapeAccentsToHtmlEntities(string source) 
{ 
    int length = source.Length; 
    var escaped = new StringBuilder(); 

    for (int i = 0; i < length; i++) 
    { 
     char ch = source[i]; 

     if ((ch >= '\x00a0') && (ch < 'Ā')) //U+{0:X4} 
     { 
      escaped.AppendFormat("&#{0};", ((int)ch).ToString(NumberFormatInfo.InvariantInfo)); //"&#{0};" 
     } 
     else 
     { 
      escaped.Append(ch); 
     } 
    } 

    return escaped.ToString(); 
} 

Explaination: mögliche Duplikate von this ist für Javascript/jquery

+0

@mplungjan Außer dass es eine völlig andere Programmiersprache ist? – Nyerguds

+0

Ah, verpasste die C# seit es HTML getaggt wurde - ich sehe nie C# Fragen. - Scheint aber gibt es ein paar Antworten hier für C# too http://stackoverflow.com/questions/3170523/converting-unicode-character-to-a-single-hexadecimal-value-in-c-sharp – mplungjan

+0

@mplungjan Ja, wahr. Immer noch ziemlich doppelt, denke ich. – Nyerguds

Antwort

0

Sie müssen nur das richtige ToString() Format für die ganze Zahl verwenden:

escaped.AppendFormat("&#x{0};", ((int)ch).ToString("X4")); 
+0

Funktioniert gut. Danke Nyerguds –

+0

aber es konvertiert zu & # x00E9; Warum? –

+0

Wahrscheinlich, weil Sie ein zusätzliches HTML irgendwie auf der letzten Schnur entkommen lassen? Sie müssen das auch in diese Funktion einfügen, im 'else'-Fall, und dann die Zeichenfolge in Ruhe lassen. Ich kann dir nicht sagen, wie/wo das passiert, ohne dass du mehr Code hast. Wenn Sie einen xml writer verwenden, sollten Sie sicherstellen, dass dieser Inhalt als HTML geschrieben wird, um solche Dinge zu vermeiden. – Nyerguds

1

Referenz hinzufügen zu einem Projekt System.Web und verwenden Sie diese Methode:

using System.Web; 
using System.Text.RegularExpressions, 

private string HtmlEntityHex(string strToReplace) 
{ 
    string strReplaced = HttpUtility.HtmlEncode(strToReplace); 
    MatchCollection xMatches = Regex.Matches(strReplaced, @"&#(\d+);"); 
    foreach (Match xMatch in xMatches) 
    { 
     strReplaced = strReplaced.Replace(xMatch.Groups[0].Value.ToString(), "&#" + int.Parse(xMatch.Groups[1].Value).ToString("X").PadLeft(4, '0') + ";"); 
    } 
    return strReplaced; 
} 
+0

Danke für die Hilfe! –

+0

Gern geschehen. –