如何在PHP中将HTML字符数转换为普通字符?

如何在PHP中将HTML字符数转换为普通字符?,php,html,html-entities,Php,Html,Html Entities,我有一些HTML数据(我无法控制,只能读取),其中包含大量斯堪的纳维亚字符(å、ä、ö、æ、ø等)。这些“特殊”字符存储为HTML字符数字(æ=和#230;)。我需要将它们转换为PHP(或JavaScript)中相应的实际字符,但我想这里PHP更好。似乎html_entity_decode()只处理“其他”类型的实体,其中æ=和#aelig。到目前为止,我提出的唯一解决方案是制作一个转换表,并将每个字符编号映射到一个真实的字符,但这并不是真正的超级智能。。。 那么,有什么想法吗?;) 干杯, 克

我有一些HTML数据(我无法控制,只能读取),其中包含大量斯堪的纳维亚字符(å、ä、ö、æ、ø等)。这些“特殊”字符存储为HTML字符数字(æ=
和#230;
)。我需要将它们转换为PHP(或JavaScript)中相应的实际字符,但我想这里PHP更好。似乎
html_entity_decode()
只处理“其他”类型的实体,其中æ=
和#aelig。到目前为止,我提出的唯一解决方案是制作一个转换表,并将每个字符编号映射到一个真实的字符,但这并不是真正的超级智能。。。
那么,有什么想法吗?;)

干杯, 克里斯托弗

&#NUMBER;
指该字符的unicode值

所以你可以使用一些正则表达式,比如:

/&#(\d+);/g
要获取数字,我不懂PHP,但我相信你可以用谷歌搜索如何将数字转换为unicode等效字符

然后简单地用字符替换正则表达式匹配项

编辑:实际上,看起来您可以使用以下功能:

mb_convert_encoding('æ', 'UTF-8', 'HTML-ENTITIES');

html\u entity\u decode()
的PHP手册页面上,它给出了以下代码,用于在4.3.0之前的PHP版本中解码数字实体:

  $string = preg_replace('~&#x([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $string);
  $string = preg_replace('~&#([0-9]+);~e', 'chr("\\1")', $string);
正如有人在评论中指出的,您可能应该将
chr()
替换为
unichr()
,以处理非ASCII字符


然而,看起来
html\u entity\u decode()
确实应该处理数字实体和文字实体。是否指定了适当的字符集(例如UTF-8)

我认为
html\u entity\u decode()
应该可以正常工作。当您尝试以下操作时会发生什么:

echo html_entity_decode('æ', ENT_COMPAT, 'UTF-8');

如果您还没有安装多字节字符串函数,您可以使用以下方法:

<?php

    $string = 'Here is a special char &#230;';

    $list = preg_replace_callback('/(&#([0-9]+);)/', create_function(
        '$matches', 'return decode(array($matches[2]));'
    ), $string);

    echo '<p>', $string, '</p>';
    echo '<p>', $list, '</p>';

    function decode(array $list)
    {
        foreach ($list as $key=>$value) {
            return utf8_encode(chr($value));
        }
    }


?>


html\u entity\u decode()
以什么方式不适合您?您要传递什么作为字符集参数?似乎对我有用…是的,它工作得非常好。。。如果您正确阅读了手册;)谢谢是的,它起作用了!看来我没有把手册读透:P谢谢!是的,它起作用了!看来我没有把手册读透:P谢谢!