PHP 处理 XML 时产生「空格」的解决办法

PHP 处理某些 XML 字符串时会产生莫名其妙的「空格」。

原因是对于 UTF-8 格式的文件编码,很多编辑器会在文件中写入一个「隐藏」的 BOM 头。对于 BOM, PHP 并不会忽略,在读取、包含或者引用这些文件时,PHP 会把 BOM 作为文件开头正文的一部分,根据嵌入式语言的特点,这串字符将被直接执行出来。这就导致了进行格式转换时会莫名其妙的「空格」,这些「空格」就是这3个不可见的字符。

解决的办法也很简单。通过 urlencode() 方法将返回的 XML 字符串转成 URL 编码后,用空字符串替换掉 %EF%BB%BF ,再用 urldecode() 转回为 XML 字符串就行了。

function saXmlToArray($xml)
{
    // 转成urlEncode
    $xml = urlencode($xml);
    // 替换掉'%EF%BB%BF',这个神奇的BOM
    $xml = str_replace('%EF%BB%BF', '', $xml);
    // 转回XML字符串
    $xml = urldecode($xml);
    // 替换掉所有的控制字符
    $xml = preg_replace('/[\x00-\x1F]|\x7F/', '', $xml);
    // 禁止引用外部XML实体
    libxml_disable_entity_loader(true);
    // 转成XML
    $xmlString = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
    // 转数组
    $array = json_decode(json_encode($xmlString), true);
    // 返回
    return $array;
}
全部评论(0)
必填
必填,不公开
我信任你,不会填写广告链接
收起