【问题标题】:PHP - Convert hex character to HTML entityPHP - 将十六进制字符转换为 HTML 实体
【发布时间】:2012-10-02 14:15:24
【问题描述】:

我正在使用 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
    )

【问题讨论】:

  • 如果您有适当的 HTML 转义符,例如 A 而不仅仅是 &#x41,您可以使用 html_entity_decode(),但自定义 preg_replace(_callback) 也可以。

标签: php imagettftext


【解决方案1】:

根据 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
);

【讨论】:

  • 它会起作用,我在发布答案之前已经对其进行了实际测试。
  • 现在不推荐使用 /e 修饰符,请改用 preg_replace_callback
【解决方案2】:

嗯,你显然没有足够努力地搜索。 html_entity_decode()

【讨论】:

  • 如果你有尾随,这是更好的选择;在您的实体上。
猜你喜欢
  • 2012-10-28
  • 2015-04-11
  • 1970-01-01
  • 2020-11-07
  • 2012-10-13
  • 2018-01-31
  • 1970-01-01
相关资源
最近更新 更多