编码奇怪的HTML实体'& lstroke;'

时间:2015-05-07 11:51:10

标签: php html xml character-encoding html-entities

我遇到了一些来自XML文件的奇怪HTML实体的问题,我必须在PHP 5.6中进行解析。

一些HTML实体是:

&lstroke;
n´
a&hook;
e&hook;

XML来自CAB摘要(http://www.cabi.org/publishing-products/online-information-resources/cab-abstracts/),其标题为:

<?xml version="1.0" encoding="ISO-8859-1"?>

但是,我尝试了几种编码系统却没有成功。另外,我尝试直接在HTML文件中使用它们,使用html_entity_decode从PHP 5.6编写它们,如下所示:

$strings = array('&Sacute;wia&hook;tek', 'Kie&lstroke;kiewicz', 'Zagdan&acute;ska', 'Mie&hook;tkiewski');

foreach ($strings as $s) {
    foreach (array(
            'ISO-8859-1', 'ISO-8859-5', 'ISO-8859-15', 'UTF-8',
            'cp866', 'cp1251', 'cp1252', 'KOI8-R', 'BIG5', 'GB2312',
            'BIG5-HKSCS', 'Shift_JIS', 'EUC-JP', 'MacRoman', '') as $l) {
        print $l . ' ==> ';
        print html_entity_decode($s, ENT_COMPAT | ENT_QUOTES | ENT_XML1 | ENT_XHTML | ENT_HTML5, $l) . '<br>';
    }
}

没有任何作用!!

我想避免任何类型的解决方案,包括解析XML文件,用正确的UTF-8字符替换这些实体。我不能预见何时会包含像这样的奇怪的HTML实体并且文件相对较大。

字符串应如下所示:

Świątek
Kiełkiewicz
Zagdańska 
Miętkiewski

所以,问题是:

如何在PHP中将这些奇怪的HTML实体解码为UTF-8?

1 个答案:

答案 0 :(得分:1)

看起来这是一个自己的标准来编码波兰语字母。功能上没有内置功能。 Ą±Ę <的官方变音符号称为ogonek(波兰语和英语) 。 &acute;用于间距变量,在此上下文中应该使用组合。

我认为最好的选择是以UTF-8对输出进行编码,并对所有这些特殊字符使用strtr()。您不必解析XML,可以将其视为纯文本。