为什么 ASP.NET Core convert Persian(or Arabic) text to Character reference (&#xhhhh;) in view
Why ASP.NET Core convert Persian(or Arabic) text to Character reference (&#xhhhh;) in view
源代码:
@{ 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 源中的相同文本(对于某些搜索引擎优化软件)
输出:
<!DOCTYPE html>
<html>
<head>
<title>سلام علیک</title>
</head>
<body>
...
</body>
</html>
对于非 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
它应该会给出相同的结果。
您必须将响应的字符编码设置为 UTF-8,以便能够输出阿拉伯语等非 Unicode 字符
<configuration>
<system.web>
<globalization requestEncoding="utf-8" responseEncoding="utf-8" />
</system.web>
</configuration>
因为,默认情况下,HTML 编码引擎只会将基本拉丁字母列入安全列表(因为浏览器存在错误。所以我们正在努力防范未知问题)。您看到的 &XXX 值仍然像您在屏幕截图中看到的那样正确呈现,因此除了增加页面大小之外没有真正的危害。
如果增加的页面大小困扰您,那么您可以 customise the encoder 安全列出您自己的字符页面(不是语言,Unicode 不考虑语言)
要加宽被编码器视为安全的字符,您可以将以下行插入到 startup.cs;
中的 ConfigureServices() 方法中
services.AddSingleton<HtmlEncoder>(
HtmlEncoder.Create(allowedRanges: new[] { UnicodeRanges.BasicLatin,
UnicodeRanges.Arabic }));
阿拉伯语有很多 blocks in Unicode,因此您可能需要添加更多块才能获得所需的全部范围。
源代码:
@{ 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 源中的相同文本(对于某些搜索引擎优化软件)
输出:
<!DOCTYPE html>
<html>
<head>
<title>سلام علیک</title>
</head>
<body>
...
</body>
</html>
对于非 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
它应该会给出相同的结果。
您必须将响应的字符编码设置为 UTF-8,以便能够输出阿拉伯语等非 Unicode 字符
<configuration>
<system.web>
<globalization requestEncoding="utf-8" responseEncoding="utf-8" />
</system.web>
</configuration>
因为,默认情况下,HTML 编码引擎只会将基本拉丁字母列入安全列表(因为浏览器存在错误。所以我们正在努力防范未知问题)。您看到的 &XXX 值仍然像您在屏幕截图中看到的那样正确呈现,因此除了增加页面大小之外没有真正的危害。
如果增加的页面大小困扰您,那么您可以 customise the encoder 安全列出您自己的字符页面(不是语言,Unicode 不考虑语言)
要加宽被编码器视为安全的字符,您可以将以下行插入到 startup.cs;
中的 ConfigureServices() 方法中
services.AddSingleton<HtmlEncoder>(
HtmlEncoder.Create(allowedRanges: new[] { UnicodeRanges.BasicLatin,
UnicodeRanges.Arabic }));
阿拉伯语有很多 blocks in Unicode,因此您可能需要添加更多块才能获得所需的全部范围。