【问题标题】:Degrading Unicode characters for web browsers with missing fonts为缺少字体的 Web 浏览器降级 Unicode 字符
【发布时间】:2011-04-07 14:54:32
【问题描述】:

我在 html 文档中使用 Unicode 'CHECK MARK' (U+2713)。我发现它在大多数浏览器中都可以正常显示,但偶尔我会遇到有人在他们的 PC 上缺少字体。如果字体丢失,是否有任何 HTML / JS 技巧来指定替代显示字符(或图像)?

【问题讨论】:

  • 我喜欢这个问题。正是复杂系统中不同抽象级别的问题的正确组合。
  • (不,我无法回答。)

标签: html unicode


【解决方案1】:

没有直接的方法可以判断任何特定字符是否以有用的方式呈现。您可以从 JavaScript 中做的所有事情就是创建一个包含目标字体中的一个(或多个)目标字符的 <span>,并将其宽度与另一个包含相同数量的字符的 <span> 进行比较,您知道不会呈现有用(*)。如果它们的宽度相同,则很可能每个都有大量的框或问号,因此您可以采取备份措施,例如添加图片。

由于这很烦人,您可能更喜欢只看图像。或者,您可以尝试在现代浏览器上嵌入 @font-face 以使用一般已知良好的字体。由于 IE 通常对 Unicode 字体回退支持较差,因此请务必包含 EOT 字体。

(*: 你可以尝试一个当前未分配并希望保持这种状态的字符,例如 U+08FF,或者像 U+FFFF 这样的保证无效字符,尽管你是否应该被允许将它放入是值得怀疑的HTML 文档。)

【讨论】:

    【解决方案2】:

    这不是您所要求的,但它可能会解决您的问题(假设您的目标是输出 HTML 而无需依赖外部图像等)

    您是否考虑过图像数据 URL(也称为 RFC2397): http://www.ietf.org/rfc/rfc2397.txt

    而不是使用:

    ✓
    

    要表示复选标记,您可以使用:

    <img src="data:image/gif;base64,R0lGODlhCgAKAJEAAAAAAP///////wAAACH5BAEAAAIALAAAAAAKAAoAAAISlG8AeMq5nnsiSlsj
    zmpzmj0FADs="/>
    

    这不需要在客户端安装任何带有 CHECK MARK 字符的特定 Unicode 字体,但它不适用于 Internet Explorer 7 或更低版本。 (Internet Explorer 8、Firefox、Safari 等应该可以正常工作)

    【讨论】:

    • +1 不错!您是如何将 Unicode 字体转换为其 base-64 编码的?您是否先制作了它的 GIF 图片?
    • @kol - 是的,它只是角色的图像。但是鉴于给出这个答案已经过去了 3 年,现在解决这个问题的更好方法是使用 WOFF 而不是我的肮脏黑客。
    【解决方案3】:

    如果您可以设计一种远程检查是否安装了 MS Office 2000 或更新版本的方法,您应该能够假设已安装 Arial Unicode MS,因此在字体中具有此代码点(只要您有 CSS字体系列设置为“Arial Unicode MS, Arial, sans-serif”)。

    我相信这仅适用于 Microsoft Internet Explorer,但您应该能够通过尝试在 JavaScript 中创建其 ActiveX 对象来检测 Word 安装:

    if(new ActiveXObject("Word.Application"))
    {
        window.alert("Word is installed, go ahead and use the Unicode check mark in HTML");
    }
    else
    {
        window.alert("Word is not installed, use your image of a check mark.");
    }
    

    但鉴于这确实只适用于 IE,可能会在 IE8 中引发安全警告,并且您仍然需要针对其他浏览器或没有 MS Office 的 IE 浏览器的回退机制,始终使用图像可能是最好的方法去。

    【讨论】:

    • Word ActiveX 控件是否标记为安全的脚本?我对此表示怀疑。此外,Arial Unicode MS 是强加给用户的糟糕选择。它弊大于利。
    • @Joey - 我相信它可以用于 IE6 和 IE7 中的脚本。 IE8 引发安全警告。对于无法以常规方式真正解决的问题,这是一种可行的解决方法(JavaScript / HTML 中没有“是否安装了此字体”或“浏览器中的此字符是否使用了字体”功能)。我不确定您为什么会否决可行的解决方案。最好的,可能不是(我认为我发布的另一个答案可能更好)。另外,我不确定为什么 Arial Unicode MS 是一个如此糟糕的选择,因为你知道它有 Unicode 字符,只要你正确地回退。
    【解决方案4】:

    Unicode 是相当标准的,我总是使用 unicodemap.org。这是您使用的字符 [link] 这将为您提供与复选标记相关的所有代码。如果您想要完全向后兼容,则需要使用实际图像。复选标记的 1 个图像文件比 javascript hack/插件更轻量级。可能是您最好的选择。

    【讨论】:

    • 前两句话在回答这个问题时几乎是假的。我相当确定您可以假设他们能够在文档中正确嵌入字符,并且他们明确表示缺少字体是一个问题,而不是其他问题。
    • 我提供了替代代码以帮助解决他们的问题,因为该复选标记可以使用不同的代码实现。而且我还提供了一个解决方案,该解决方案可以为 100% 的用户使用,并且不会通过 hack 加载网站。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多