我知道这有点矛盾,因为浏览器必须下载字体才能呈现它,但我想知道是否有一种方法可以在无法直接下载(或缓存到用户计算机上)的地方托管它那很重要)。
我想到的一个解决方案是制作一个 PHP 脚本,将当前时间散列到秒(添加盐)。如果 GET 请求中的特定变量与此哈希匹配,则它将发送字体的 MIME 类型的 header ,然后输出字体文件的内容。
然后我会在样式表中重新创建散列并连接字符串,这将是对 PHP 脚本的有效请求。
这是基本的想法。我有它的工作。但这有两个缺陷:
- 如果浏览器在另一秒请求字体,PHP 脚本将无法匹配哈希值,因此不会输出任何内容,因此字体将是备用字体(如果没有提供,则为默认字体)<
- 如果有人足够快,他/她仍然可以在同一秒请求字体时直接下载字体(假设这可能必须是一个脚本来执行此操作。
浏览器还会在任何地方缓存字体(并不是说缓存会有帮助,因为 URI 中的哈希值实际上总是不同的)。
编辑:是否有我可以利用的任何 $_SERVER
变量?
最佳答案
正如其他答案所说,对于真正想要下载它的人来说非常困难(不可能)。几乎总有办法。然而,为了给你一些想法,this article描述了 Typekit 如何处理该问题。
关于php - 如何在不让用户下载字体的情况下嵌入字体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8158472/