如何在不给用户下载字体的情况下嵌入字体?

时间:2011-11-16 20:49:24

标签: php css apache font-face

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

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

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

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

  1. 如果浏览器在不同的时间内请求字体,PHP脚本将无法匹配散列,因此,不会输出任何内容,因此字体将是备份字体(如果没有提供,则为默认字体)
  2. 如果某人足够快,他/她仍然可以直接下载该字体,如果他/她在同一秒钟内请求它(授予这可能必须是一个可以执行此操作的脚本。
  3. 浏览器也可以在任何地方缓存字体(不是缓存会有帮助,因为URI中的哈希几乎总是不同)。

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

如果您希望浏览器可以使用该字体来显示您的页面,则必须允许以某种方式下载该字体。一旦它被放到电线上并发送到浏览器,用户将用它做什么就完全没有了。

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

答案 2 :(得分:0)

您可以使解决方案变得更加困难,但是如果您的目标是保护字体IP,则浏览器无法下载。对于专门的对手,你无法控制浏览器的功能,无论你怎么努力。

但是,您可以做的是提供服务器端代码以使用您的字体生成图像,并提供该图像。我假设你不是试图阻止用户看到这种字体的渲染,只是直接使用字体?