PHP - 将十六进制字符转换为HTML实体

时间:2012-10-02 14:15:25

标签: php imagettftext

我正在使用imagettftext来创建某些文本字符的图像。为此,我需要将一个十六进制字符代码数组转换为它们的HTML等价物,我似乎无法找到PHP内置的任何功能来执行此操作。我错过了什么? (通过搜索,我遇到了这个:PHP function imagettftext() and unicode,但是没有一个答案似乎做我需要的 - 一些字符转换但大多数没有。)

这是生成的HTML表示(在浏览器中)

 [characters] => Array
    (
        [33] => A
        [34] => B
        [35] => C
        [36] => D
        [37] => E
        [38] => F
        [39] => G
        [40] => H
        [41] => I
        [42] => J
        [43] => K
        [44] => L
    )

来自此数组(无法在imagettftext中呈现):

 [characters] => Array
    (
        [33] => &#x41
        [34] => &#x42
        [35] => &#x43
        [36] => &#x44
        [37] => &#x45
        [38] => &#x46
        [39] => &#x47
        [40] => &#x48
        [41] => &#x49
        [42] => &#x4a
        [43] => &#x4b
        [44] => &#x4c
    )

2 个答案:

答案 0 :(得分:4)

基于PHP手册中的a sample,您可以使用正则表达式执行此操作:

$newText = preg_replace('/&#x([a-f0-9]+)/mei', 'chr(0x\\1)', $oldText);

我不确定原始html_entity_decode()是否适用于您的情况,因为您的数组元素缺少尾随; - 这些实体的必要部分。

编辑,2015年7月:

在回应Ben的评论时注意到/e修饰符被弃用,以下是使用preg_replace_callback()和匿名函数编写此内容的方法:

$newText = preg_replace_callback(
    '/&#x([a-f0-9]+)/mi', 
    function ($m) {
        return chr(hexdec($m[1]));
    },
    $oldText
);

答案 1 :(得分:0)

嗯,你显然没有足够的搜索。的 html_entity_decode()