14

我有一个网络应用程序,用户可以在其中以 WSIWYG 风格更改输入文本区域的字体系列。现在,假设用户在文本区域输入了一些中文文本,但选择了一个不支持中文字符的字体。在我的应用程序中,我希望用户看到那些通常在字体不支持字符时显示的讨厌的方块(或类似的东西)。这样,用户就会知道该字体不支持该语言并且可以选择不同的语言。我遇到的问题是浏览器(Firefox 17 和 Chrome 23)似乎使用支持这些汉字的字体(如 Arial)呈现文本的中文部分,使用户相信他正在尝试使用的字体工作正常。

有没有办法(我猜通过 CSS)来防止这种情况?有没有办法让浏览器只在这一次不那么“好”?

先感谢您。

4

2 回答 2

10

正如另一个答案已经解释的那样,解决方案是使用包含“所有”unicode 代码点的后备字体。然而,困难的部分是找到或建造一个重量不超过几 MB 的。

几年后,现在有一个更轻量级的备用字体解决方案,Adobe 的NotDef 字体。它显示了一个带有 1,111,998 个 Unicode 代码点的十字框,只有大约 22Kb,并且使用的是 SIL OPEN FONT LICENSE 版本 1.1。

如果您不想显示任何内容,还有Adob​​e Blank 字体

于 2016-12-11T19:11:29.570 回答
7

您可以通过抛出一个包罗万象的字体来拦截字体替换过程,使用相当于font-family: userChoice, yourCatchAllwhereyourCatchAll is a font 具有所有字符的通用字形。

问题在于找到这样的字体。最后的手段字体将是理想的,因为它还可以在视觉上广泛地指示字符的类别,但其 EULA 似乎不允许修改。这是否适用于网络字体格式(如 .eot 和 .woff)的构建是有争议的。

Unicode BMP Fallback Font似乎有更自由的使用规则,但它只是在一个框中显示一个字符作为其 Unicode 编号(并且仅支持基本多语言平面,尽管它包含大多数人听说过的所有字符)。

于 2012-12-12T17:37:33.103 回答