我目前正在从互联网上抓取一些数据并将其转换为XML文档。
根据元标记,正在擦除的文档是utf-8
问题是有些数据包含了外来字符,我找不到一种可靠地将它们转换为XML/UTF-8友好实体的方法,以下错误是我通过阅读找到的,理想情况下,我希望有一个始终有效的解决方案。
示例1工作正常,示例2失败。我的研究修正了示例1,但它似乎不是一个笼统的解决方案。
Côte d'Ivoire
Côte d'Ivoire (correct)
我在xpath上使用以下函数成功地得到了正确的解析。
$w->text(charset_decode_utf_8((string)$match->a));
function charset_decode_utf_8($string) {
if(@!ereg("[\200-\237]",$string) && @!ereg("[\241-\377]",$string)) {
return $string;
}
$string = preg_replace("/([\340-\357])([\200-\277])([\200-\277])/e","''.((ord('\\1')-224)*4096 + (ord('\\2')-128)*64 + (ord('\\3')-128)).';'",$string);
$string = preg_replace("/([\300-\337])([\200-\277])/e","''.((ord('\\1')-192)*64+(ord('\\2')-128)).';'",$string);
return $string;
}
ÃFB Stiegl Cup
ÖFB Stiegl Cup (wrong)
不幸的是,它被转换为双实体。我不知道如何将其转换为适当的HTML实体。
我已经尝试过:
创建XML文档时使用ISO-8859-1编码
使用带有UTF-8编码的HTMLEntities
任何帮助都将非常感谢,因为我正在努力让事情正确保存我的头发。