【问题标题】:How can I embed a font without giving the user the ability to download it?如何在不让用户下载的情况下嵌入字体?
【发布时间】:2011-11-17 05:00:33
【问题描述】:

我知道这有点矛盾,因为浏览器必须下载字体才能呈现它,但我想知道是否有办法将它托管在无法直接下载(或缓存到用户计算机上)的地方那件事)。

我想出的一个解决方案是制作一个 PHP 脚本,将当前时间散列到秒(添加盐)。如果 GET 请求中的特定变量与此哈希匹配,则它将发送字体 MIME 类型的标头,然后输出字体文件的内容。

然后我会在样式表中重新创建哈希并连接字符串,这将是对 PHP 脚本的有效请求。

这是基本的想法。我让它工作。但这有两个缺陷:

  1. 如果浏览器在另一秒请求该字体,PHP 脚本将无法匹配哈希值,因此,不会输出任何内容,因此该字体将是备用字体(如果未提供,则为默认字体)李>
  2. 如果有人足够快,如果他/她在同一秒内请求,他/她仍然可以直接下载字体(当然这可能必须是一个可以执行此操作的脚本。

浏览器也会在任何地方缓存字体(并不是说缓存会有所帮助,因为 URI 中的哈希实际上总是不同的)。

编辑:我可以利用任何$_SERVER 变量吗?

【问题讨论】:

    标签: php css apache font-face


    【解决方案1】:

    正如其他答案所说,对于真正想要下载它的人来说,这非常困难(不可能)。几乎总是有办法的。不过,为了给您一些想法,this article 描述了 Typekit 如何处理该问题。

    【讨论】:

      【解决方案2】:

      如果您希望浏览器可以使用该字体来显示您的页面,则必须允许以某种方式下载该字体。一旦它被连接到网络上并发送到浏览器,就完全不知道用户会用它做什么。

      你只能让它更难检索,知识渊博的用户会轻而易举地绕过你所做的任何事情。

      【讨论】:

        【解决方案3】:

        您可以像您的解决方案一样让它变得更加困难,但是如果您的目标是保护您的字体 IP,那么浏览器根本无法下载它。无论你多么努力地对抗一个专门的对手,你都无法控制浏览器的行为。

        不过,您可以做的也许是提供服务器端代码以使用您的字体生成图像,然后提供该图像。我假设您不是试图阻止用户看到此字体的呈现,只是直接使用该字体?

        【讨论】:

        • 我希望文本对搜索引擎友好,所以不幸的是图像解决方案并不理想。不过想了想。 ://
        • 您可以在您的 元素中添加文本,在 alt 属性中 - 有关详细信息,请参阅 w3schools.com/tags/att_img_alt.asp。或者,您可以在内容中包含一个隐藏的
          ,sans-font。
        • 是的,但是如果文本很长,下载/生成的图像将是一大堆。
        猜你喜欢
        相关资源
        最近更新 更多
        热门标签