【发布时间】:2009-07-21 17:57:20
【问题描述】:
我目前正在从互联网上抓取一些数据并转换为 xml 文档。
- 根据元标记,被抓取的文档是 utf-8
问题是某些数据包含外来字符,我找不到可靠地将它们转换为 XML / utf-8 友好实体的方法,以下错误是我通过阅读设法找到的,我希望一个始终有效的解决方案。
示例 1 正常工作,示例 2 失败。我的研究修复了示例 1,但它似乎不是一揽子解决方案。
科特迪瓦 科特迪瓦(正确)我设法在我的 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斯蒂格杯
ÖFB Stiegl 杯(错误)
不幸的是 - Ö - 它被转换为双重实体。我不知道如何将其转换为正确的 html 实体。
我试过了:
- 在创建我的 xml 文档时使用 iso-8859-1 编码
- 使用 utf-8 编码的 htmlentities
任何帮助都将不胜感激,因为我正在努力让事情正确保存。
【问题讨论】:
-
为什么不用字符本身呢? UTF-8 可以编码任何 Unicode 字符。
-
请问这是什么意思。目前我保存我的 xml 文档,在浏览器中加载它,我看到了错误。
-
ok 试过了,查看时我看到:
Côte d'Ivoire ÖFB Stiegl Cup Ykkönen
他们看起来都错了 :( -
看起来您正在提供 utf-8 编码的数据,但说“它都是 iso-8859 编码的”。您是否设置了正确的“Content-type:...; charset=utf-8”标头?也可以通过php.net/ini.core#ini.default-charset 完成
标签: php xml character-encoding