HTML кодирование символов, не входящих в набор символов - PullRequest
0 голосов
/ 15 декабря 2010

У нас есть веб-приложение, которое использует набор символов ISO-8859-1.У профессиональных пользователей есть «странные» имена, которые содержат такие символы, как Š (html, закодированный здесь для вашего удобства). Мы храним это в нашей базе данных, но мы не можем отобразить его правильно.

Как лучше всего с этим справиться?Я думаю, что я должен автоматически преобразовывать символы вне набора символов с помощью его кодировки чисел сущности HTML (от Š до Š)

Но у меня возникают проблемы при поиске, как это сделать автоматически (без использования таблицывсех ценностей).

Этот код работает для расширенных символов ASCII, таких как 'å' (которые присутствуют в ISO-8859-1).Я хотел бы сделать то же самое с другими персонажами.Есть ли в этих значениях кодировки сущностей HTML шаблон, который я могу использовать?

unsigned int c;  
for( int i=0; i < html.GetLength(); i++)  
{  
    c = html[i];  
    if( c > 255 || c < 0 )  
    {  
        CString orig = CString(html[i]);  
        CString encoded = "&#";  
        encoded += CTool::String((byte)c);  
        encoded += ";";  
        html.Replace(orig, encoded);  
    }  
}  

Ответы [ 2 ]

1 голос
/ 15 декабря 2010

Веб-страница должна указывать браузеру отображать ответ в UTF-8. Обычно это происходит путем предоставления кодировки в заголовке ответа Content-Type, например text/html;charset=UTF-8.

Response.AppendHeader("Content-Type", "text/html;charset=UTF-8");

Объекты HTML / XML существуют исключительно для того, чтобы вы могли сохранить источник веб-страницы в кодировке, отличной от UTF-8.

0 голосов
/ 16 декабря 2010

HTML выглядит как строка "Unicode" CString. Это означает, что это кодировка UTF-16. Синтаксис "& # ddd" использует номер кодовой точки Unicode. Обычно это довольно просто. Š - это U + 0160, что означает 0x0160 в UTF-16. Та, конечно, 352 десятичных, так что вы получите &#352.

У вас проблема только в том случае, если вы встретите персонажа вне Базовой многоязычной плоскости (BMP), который находится за U + FFFF. Это больше не вписывается в 16 бит, и поэтому в вашей строке html будет принимать два символа. Тем не менее, он должен производить только одно значение &#ddddd. Это настолько редко, что вы часто можете игнорировать это.

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