2016-04-22 3 views
0

Это мой юникода Строка >Побег акцентами HtmlEntity как Hex

Désastres

выше строк должны быть преобразованы в HTML Entity (Hex), как

Désastres

Ниже приведен код, он преобразует строку в html entiry, но в Decimal.

Может ли кто-нибудь помочь мне получить желаемый результат?

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: возможные дубликаты this для JavaScript/JQuery

+0

@mplungjan За исключением того, что это совершенно другой язык программирования? – Nyerguds

+0

Ах, пропустил C#, так как он был помечен HTML - я никогда не вижу вопросов на C#. - Кажется, есть несколько ответов здесь для C# слишком http://stackoverflow.com/questions/3170523/converting-unicode-character-to-a-single-hexadecimal-value-in-c-sharp – mplungjan

+0

@mplungjan Да, правда. Наверное, все еще довольно повторяющийся. – Nyerguds

ответ

0

Вам просто нужно использовать правильный формат ToString() для целого:

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

Работает хорошо. Спасибо Nyerguds –

+0

, но он преобразуется в & # x00E9; Зачем? –

+0

Возможно, потому, что вы каким-то образом выполняете дополнительный HTML-выход на финальной строке? Вы также должны поместить это в эту функцию в случае 'else', а затем оставить строку в покое. Я не могу сказать вам, как и где это происходит без вашего кода. Если вы используете какой-либо писатель xml, обязательно заставьте его писать этот контент как уже являющийся HTML, чтобы избежать такого рода вещей. – Nyerguds

1

Добавить ссылку на System.Web в свой проект и использовать этот метод:

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

Спасибо за помощь! –

+0

Добро пожаловать. –

Смежные вопросы