PHP EOT 解决方法

通常我们都是在浏览器中以图片方式显示nfo,有优点也有缺点。优点先不说了,最大的缺点就是不能够进行选择、复制等操作。在浏览器中以文本方式显示nfo,除了安装特定的字体外,似乎目前还没有更好的方法。

以前我曾经写过一个nfo2txt的小程序,就是把nfo文件中的特殊字符进行转化,在记事本中用等宽字体(如courier new)浏览正常,但在IE中确是一团糟,具体什么原因我不清楚,不过在firefox浏览器中却可以正常显示。

一直在找一种能够显示nfo的TrueType字体,因为可以把它转化为嵌入html的字体在浏览器中使用。昨天我在Hanzac@ccf写的基于 HTA 的 NFO 查看工具中找到了Lucida ConsoleP这款字体,把它转化成了OpenType字体(压缩的TrueType字体),在IE中显示正常,在firefox中却没有效果。这种方式的缺点就是浏览器下载字体需要一段时间。

下面一段小程序,可以根据不同的浏览器而使用不同的方法显示nfo,在IE和firefox下似乎还没有发现什么问题。
演示地址:http://www.ugia.cn/nfo/nfo.php

$nfodata = file_get_contents("ror.nfo");
$nfodata = str_replace("\r", "", $nfodata);
$nfodata = preg_replace("/(^\s)(www\.\S+)(^\s)((httpftphttps):\/\/\S+)/is", " $2$4", $nfodata);

if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) //如果客户端浏览器为IE
{
header('Content-Type: text/html; charset=windows-1252 ');
$ctype = "";
$style = "
@font-face {
font-family: ugia;
font-style: normal;
font-weight: normal;
src: url(http://0day.ugia.net/ugia.eot);
}

body, a, pre {
font-family: ugia, courier new;
font-size:11px;
}";
}
else //其他浏览器
{
header('Content-Type: text/html; charset=utf-8 ');
$ctype = "";
$style = "
body, a, pre {
font-family: courier new;
font-size:11px;
}";

require("nfo2txt.php");
$nfodata = conv_nfo($nfodata);
}
?>
http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

nfo file









附件中包含nfo2txt.php和luconp.ttf这两个文件,需要把luconp.ttf使用微软的WEFT转化为.eot文件,我不知道如何去除eot文件的站点限制,所以需要你自己转化并指定使用此eot文件的地址了。Microsoft WEFT下载地址:
http://download.microsoft.com/download/8/a/1/8a1be03f-f7fc-4504-af9a-7b9230775284/WEFTIII2b1.exe

css2种关于@font-face 这个规则的说明:

@font-face { font-family : name ; src : url( url ) ; sRules }

说明:
name :  字体名称
url :  使用绝对或相对地址指定OpenType字体
sRules :  样式表定义

设置嵌入HTML文档的字体。
嵌入HTML文档的字体是指将OpenType字体(压缩的TrueType字体)文件映射到客户端系统,用来提供HTML文档使用该字体,或取代客户端系统已有的同名字体。

示例:
@font-face { font-family: dreamy; font-weight: bold; src: url(http://www.example.com/font.eot); }

没有评论: