PHP-GD: 处理Unicode字符

8
我正在开发一个使用PHP GD扩展和用户选择的TTF字体渲染字符的Web服务。在ASCII领域,这很好用,但存在一些问题:
1. 要呈现的字符串以UTF-8格式输入。我想将可选字体列表限制为只能正确呈现字符串的字体,因为有些字体仅具有ASCII字符、ISO 8601等的字形。
2. 在包含一些装饰字符的情况下,可以使用所选字体呈现大部分字符,并在Arial(或包含扩展字形的任何字体)中呈现装饰字符。
似乎PHP-GD不支持查询字体元数据来确定是否可以在给定字体中呈现字符。如何将字体度量信息传递到PHP中?是否有命令行实用程序可以以XML或其他可解析格式转储?

只需获取一个Unicode字体即可。 - Your Common Sense
4个回答

2
PHP-Cairo 与 Pango 和 fontconfig 结合使用时,应具备足够的智能以在适当的情况下进行字体替换。

1
如果您没有Unicode字体,您需要尝试类似的东西。
 <?php 
$trans = new Latin1UTF8(); 

$mixed = "MIXED TEXT INPUT"; 

print "Original: ".$mixed; 
print "Latin1:   ".$trans->mixed_to_latin1($mixed); 
print "UTF-8:    ".$trans->mixed_to_utf8($mixed); 

class Latin1UTF8 { 

    private $latin1_to_utf8; 
    private $utf8_to_latin1; 
    public function __construct() { 
        for($i=32; $i<=255; $i++) { 
            $this->latin1_to_utf8[chr($i)] = utf8_encode(chr($i)); 
            $this->utf8_to_latin1[utf8_encode(chr($i))] = chr($i); 
        } 
    } 

    public function mixed_to_latin1($text) { 
        foreach( $this->utf8_to_latin1 as $key => $val ) { 
            $text = str_replace($key, $val, $text); 
        } 
        return $text; 
    } 

    public function mixed_to_utf8($text) { 
        return utf8_encode($this->mixed_to_latin1($text)); 
    } 
} 
?>

取自 http://php.net/manual/en/function.utf8-decode.php

如果混合和UTF-8字符相等,那么你可以使用它。如果不相等,则无法使用。


1

0

我最终使用TTX工具来转储字体度量。然后,我可以检查生成的.ttx文件并查看字符->字形映射。我是手动完成的,但自动解析XML文件也是可能的。

以下是一个示例GNU Makefile,它从同一目录中的一组TrueType字体生成.ttx文件:

all: fontmetrics

fontmetrics: $(patsubst %.ttf,%.ttx,$(wildcard *.ttf))
.PHONY: fontmetrics

clean:
    rm -f *.ttx

%.ttx: %.ttf
    ttx -t cmap $<

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接