我遇到了一些来自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('Świa&hook;tek', 'Kie&lstroke;kiewicz', 'Zagdan´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?
答案 0 :(得分:1)
看起来这是一个自己的标准来编码波兰语字母。功能上没有内置功能。 Ą,±,Ę和 <的官方变音符号称为ogonek(波兰语和英语) 。 ´
用于间距变量,在此上下文中应该使用组合。
我认为最好的选择是以UTF-8对输出进行编码,并对所有这些特殊字符使用strtr()
。您不必解析XML,可以将其视为纯文本。