从UTF-8 XML数据中删除不可见的字符

时间:2013-08-06 14:32:09

标签: php utf-8

我正在使用包含大量空白的XML Feed。 当我回显原始Feed时,看起来表格数据的列只是用白色空格正确格式化了。

我已经尝试了许多正则表达式模式来删除它,只允许可见字符,修剪,印章,utf-8编码/解码,没有任何东西触及它。当我回应一个值并看到这个时,就像是在笑我的脸:

string(17) "72"

在Notepad ++中打开数据并显示所有字符,它只是将其显示为空格。我不知道该去哪里。

我收到了以下错误:

simplexml_load_string(): Entity: line 265: parser error : Input is not proper UTF-8, indicate encoding !
Bytes: 0xB0 0x43 0x20 0x74

3 个答案:

答案 0 :(得分:1)

我刚发现这个正则表达式(未经测试)

$xml_data = preg_replace("/>\s+</", "><", $xml_data);

如果您使用的是xml解析器,我认为您可以使用此处引用的“XML_OPTION_SKIP_WHITE”选项: http://php.net/manual/en/function.xml-parser-set-option.php

答案 1 :(得分:1)

尝试通过utf8_encode()运行数据 - 它看起来像是一个黑客,但似乎原始数据没有正确设置。

我的理论是你用错误的编码抓住它,正确的解决方案就是加载它。

答案 2 :(得分:0)

<强>解决方案

我的hacky解决方法有效:

$raw = file_get_contents('http://stupidwebservice.com/xmldata.asmx/Feed');
$raw = urlencode(utf8_encode($raw));
$raw = str_replace('++','',$raw);
$raw = urldecode($raw);
在utf-8编码之后的 urlencoding将空格转换为+。我只是删除了所有double ++的实例并将其取回。效果很好。