Как я могу включить функцию разрыва слова по длине без разделения внутри специальных символов в кодировке HTML - PullRequest
3 голосов
/ 21 июля 2010

Я хотел бы реализовать функциональность, которая вставляет разрывную метку, если слово слишком длинное, чтобы появиться в одной строке.

    protected string InstertWBRTags(string text, int interval)
{
    if (String.IsNullOrEmpty(text) || interval < 1 || text.Length < interval)
    {
        return text;
    }
    int pS = 0, pE = 0, tLength = text.Length;
    StringBuilder sb = new StringBuilder(tLength * 2);

    while (pS < tLength)
    {
        pE = pS + interval;
        if (pE > tLength)
            sb.Append(text.Substring(pS));
        else
        {
            sb.Append(text.Substring(pS, pE - pS));
            sb.Append("&#8203;");//<wbr> not supported by IE 8
        }
        pS = pE;
    }
    return sb.ToString();
}

Проблема в том, что я могу сделать, если текст содержит специальные символы в кодировке html? Что я могу сделать, чтобы предотвратить вставку тега внутрь &szlig;? Что я могу сделать, чтобы посчитать реальную длину строки (которая отображается в браузере)? Строка типа &#9825;&#9829; ♡ ♥ содержит только 2 символа (сердца) в браузере, но ее длина составляет 14.

Ответы [ 2 ]

1 голос
/ 21 июля 2010

Одним из решений будет декодирование сущностей в символы Unicode, которые они представляют, и работа с ними.Для этого используйте System.Net.WebUtility.HtmlDecode(), если вы находитесь в .NET 4 или System.Web.HttpUtility.HtmlDecode(), в противном случае .

Но имейте в виду, что не все символы Юникода умещаются в один char.

0 голосов
/ 21 июля 2010

Вам нужно пройти через весь текст символ за символом, когда вы найдете знак &, а затем изучите, что будет дальше, если вы достигнете знака #, то вполне вероятно, что после этого до столбца будет набор чисел проверьте это также). В такой ситуации вы перемещаете свой итератор в положение ближайшей точки с запятой и увеличиваете счетчик.

На диалекте Java

int count = 0;

        for(int i = 0; i < text.length(); i++) {

            if(text.charAt(i) == '&') {
                i  = text.indexOf(';', i) + 1; // what, from
            }

            count++;

        }

Очень упрощенная версия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...