Почему ASP.NET ядро преобразует персидский (или арабский) текст в ссылку на символ (&#xhhhh;) в представлении


Исходный код:

@{ ViewBag.Title = "سلام علیک"; }

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>@ViewBag.Title</title>
</head>
<body>

    <div class="container" dir="rtl">
        @RenderBody()
    </div>

</body>
</html>

Это хорошо визуализируется в браузере, но я хочу, чтобы тот же текст в HTML-источнике (для некоторых программ оптимизатора поисковой системы)

Проблема ViewBag в арабском тексте

И вывод:

<!DOCTYPE html>
<html>
<head>
    <title>سلام علیک</title>
</head>
<body>
...
</body>
</html>
3 2

3 ответа:

Потому что по умолчанию механизм кодирования HTML будет содержать только базовый латинский алфавит (потому что браузеры имеют ошибки. Поэтому мы пытаемся защититься от неизвестных проблем). Значения &XXX, которые вы видите, по-прежнему отображаются так же правильно, как и на снимках экрана, поэтому нет никакого реального вреда, кроме увеличенного размера страницы.

Если увеличенный размер страницы беспокоит вас, то вы можете настроить кодер для безопасного списка ваших собственных символьных страниц (не язык, Unicode не думает в терминах на языке)

Чтобы расширить символы, которые кодировщик считает безопасными, необходимо вставить следующую строку в метод ConfigureServices () при запуске.cs;

services.AddSingleton<HtmlEncoder>( HtmlEncoder.Create(allowedRanges: new[] { UnicodeRanges.BasicLatin, UnicodeRanges.Arabic }));

[1]}арабский язык имеет довольно много блоков в Unicode , поэтому вам может потребоваться добавить больше блоков, чтобы получить полный диапазон, который вам нужен.

Для не ACII символов, я рекомендую использовать UTF-8 в качестве кодировки. Вы можете добавить эту строку в свой HTML-файл (общий макет). в теге <head>.

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

И установить dir= " rtl "и lang= "ar", использовать как:

<p dir="rtl" lang="ar" ">سلام علیک</p>

Также Вы можете использовать ViewData["Title"] вместо ViewBag.Title это должно дать тот же результат.

Кодировки символов в HTML-wiki

Вы должны установить кодировку символов для ответа в UTF-8, чтобы иметь возможность выводить символы, отличающиеся от Unicode, такие как арабский

<configuration>
  <system.web>
    <globalization requestEncoding="utf-8" responseEncoding="utf-8" />
  </system.web>
</configuration>