如何在使用严格doctype的HTML页面中查看阿拉伯语/波斯语数字?

21

我有一个从右向左的HTML页面。当我不使用任何文档类型(doctype)时,我的数字是阿拉伯语/波斯语,但是当我使用严格模式时,它们变成了英语。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Final//EN">

在添加文档类型之前:

添加文档类型之前

在添加文档类型之后:

添加文档类型之后

此外,我还向我的页面添加了这些元标记:

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

那么在使用严格的doctype(因为Firefox无论如何都不会显示阿拉伯数字)的页面中,我该如何查看阿拉伯数字(在IE中)?


1
哪个浏览器?哪个文档类型声明?您能给我们展示一个例子吗? - Matt Ball
你使用的文档类型是什么?并且,你的数据是否实际上采用UTF-8编码?波斯字符从哪里来,它们在文件中吗?需要更多信息。 - Pekka
我无法复现这个问题,一个最小化的示例在我的机器上可以运行。你需要提供更多信息。 - Konrad Rudolph
1
@mahdi 但是你使用了错误的严格模式,或者你标记了错误的问题:标签显示你正在使用XHTML,但你的代码却表明你正在使用HTML 4。 - Konrad Rudolph
阿拉伯/波斯数字是字符,而不是真实的数字/整数。 - Yousha Aleayoub
显示剩余5条评论
13个回答

10
您可以在模板中使用以下JavaScript代码将英文数字转换为波斯数字:

您可以使用以下JavaScript代码在模板中将英文数字转换为波斯数字:

    <script type="text/javascript">
    var replaceDigits = function() {
        var map = ["&\#1776;","&\#1777;","&\#1778;","&\#1779;","&\#1780;","&\#1781;","&\#1782;","&\#1783;","&\#1784;","&\#1785;"]
        document.body.innerHTML = document.body.innerHTML.replace(/\d(?=[^<>]*(<|$))/g, function($0) { return map[$0]});
    }
    window.onload = replaceDigits;
    </script>

1
谢谢你提供这个脚本。但据我所知,body标签不需要onload属性。 - yukashima huksay

10

这里是一段小的JavaScript代码,可以将字符串"1234"转换为"١٢٣٤"。

   var map =
    [
    "&\#1632;","&\#1633;","&\#1634;","&\#1635;","&\#1636;",
    "&\#1637;","&\#1638;","&\#1639;","&\#1640;","&\#1641;"
    ];

    function getArabicNumbers(str)
    {
        var newStr = "";

        str = String(str);

        for(i=0; i<str.length; i++)
        {
            newStr += map[parseInt(str.charAt(i))];
        }

        return newStr;
    }

2
<script type="text/javascript"> var map = [ "&#1632;","&#1633;","&#1634;","&#1635;","&#1636;", "&#1637;","&#1638;","&#1639;","&#1640;","&#1641;" ]; function getArabicNumbers(str) { var newStr = ""; str = String(str); for(i=0; i<str.length; i++) { newStr += map[parseInt(str.charAt(i))]; } return newStr; } $(document).ready(function(){ $(".arabic-num td").each(function(){ $(this).html(getArabicNumbers($(this).html())); }); }); </script>这对我有用 - MoizNgp

5

如果您需要将一些英文数字替换为阿拉伯数字,而不是整个 HTML,请将您需要转换的数字传递给此函数。

function toArabicNumeral(en) {
    return ("" + en).replace(/[0-9]/g, function(t) {
        return "٠١٢٣٤٥٦٧٨٩".slice(+t, +t+1);
    });
}

仅提供代码的答案几乎总是可以通过添加一些解释来改进其工作方式和原因。在这种情况下,一个已经存在九个答案的八年老问题也应该解释它所回答的问题的新方面。这段代码将如何用于修改使用<ol>生成的有序列表的元素? - Jason Aller
@JasonAller,此代码提供了一种将任何英文数字替换为阿拉伯数字的方法,这与先前的回复不同,先前的回复替换整个HTML元素。如果需要更改生成的有序列表的元素,则可以使用css来完成: list-style: arabic-indic; }``` - Amr Ragaey

3

在 HTML 页面中查看阿拉伯语/波斯语数字非常简单。

我通过更改字体名称解决了相同的问题,

在我的情况下,我想向所有用户显示相同的字符。

您可以选择包含阿拉伯-印地数字的字体,并使用 css(@font-face)导入它,然后简单地使用它,

这适用于所有主要浏览器(IE.. Firefox.. Chrome)

查看此结果

以下是页面的完整代码:

<html>
<head>

</head>
<body>
<style type="text/css">

@font-face {
    font-family: ArabicTwo_Bold;
    src: url( ArabicTwo_Bold.eot);
}

@font-face {
    font-family: ArabicTwo_Bold;
    src: url( ArabicTwo_Bold.ttf);
}


div , input {
 font-family: ArabicTwo_Bold;
}
</style>


<input type='text' value='هذا نص هندي 123456 ' />
<div> هذا نص هندي 123456  </div>
</body>
</html>

3

假设您想要一个XHTML 1.0 Strict文档:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fa" lang="fa" dir="rtl">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Title here</title>
  </head>

  <body>
    <p>Text here</p>
  </body>
</html>

以下是等效的 HTML 4.01 Strict 文档:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
    "http://www.w3.org/TR/html4/strict.dtd">
<html lang="fa" dir="rtl">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Title here</title>
  </head>

  <body>
    <p>Text here</p>
  </body>
</html>

以下是一个等效的 HTML5 页面,仅供比较参考。

<!DOCTYPE html>
<html lang="fa" dir="rtl">
  <head>
    <meta charset="UTF-8" />
    <title>Title here</title>
  </head>

  <body>
    <p>Text here</p>
  </body>
</html>

2

try this , hope helps you ;)

between and

<script language="JavaScript" type="text/javascript">


var replaceDigits = function() {
var map =
[
"&\#1632;","&\#1633;","&\#1634;","&\#1635;","&\#1636;",
"&\#1637;","&\#1638;","&\#1639;","&\#1640;","&\#1641;"
]

document.body.innerHTML =
document.body.innerHTML.replace(
/\d(?=[^<>]*(<|$))/g,
function($0) { return map[$0] }
);
}

</script>

在 body 标签的结尾处插入以下内容:
<script type="text/javascript">
window.onload = replaceDigits
</script>

2

将Firefox默认的数字渲染为拉丁数字 要更改此设置,请转到Firefox的地址栏并键入about:config 此页面是Firefox的高级设置 找到“bidi.numeral”这一行,并双击它 如果将值设置为“1”,则Firefox会根据上下文来渲染文本。如果文本是波斯语,则将数字渲染为波斯数字。 如果将值设置为“4”,则始终将数字渲染为波斯数字


谢谢你,我的朋友。Chrome 有类似的东西吗? - Hosein

1
var map_format_arabic = ["&\#1632;","&\#1633;","&\#1634;","&\#1635;","&\#1636;", "&\#1637;","&\#1638;","&\#1639;","&\#1640;","&\#1641;"];

$.each( $('.format_arabic'), function () {
    var n=$(this).text().replace(/\d(?=[^<>]*(<|$))/g, function($0) { return map_format_arabic[$0]});
    $(this).html(n);
});

1
无论文本方向如何(在Chrome、Safari、Firefox和Opera中),这对我都有效:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Final//EN">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <style type="text/css">
            body { direction: rtl; }
        </style>
    </head>

    <body>
        ۴۲
    </body>
</html>

这里省略了content-language,因为它在这里并不必要。


@mahdi,它在Chrome中肯定可以工作。你的浏览器版本是多少?你是否使用正确的编码保存了文件?我无法真正代表IE9(老实说,我对MISE不太关心),但我真的不相信MSIE会将一些Unicode字符转换为完全不相关的字符而没有任何提示。你可能安装了一个自动进行波斯语=>英语翻译的插件吗? - Konrad Rudolph
我使用Chrome 10,并且是用UTF-8保存的。 - Mahdi

1
如果您使用波斯语字体,例如“BNazanin”并编写:

http-equiv="Content-Type" content="text/html; charset=UTF-8"
http-equiv="Content-Language" content="fa" 在meta标签中。

那么您可以看到波斯数字。

如果您在html页面中的某些标签中使用lang='En',则该标签中的数字将以英文显示。


问题在于使用默认字体,如Tahoma或Arial。 - Mahdi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接