蓝优小窝
蓝优
始于网络,终于现实
90后 狮子座 联系
通常XML转JSON的话只需用simplexml_load_string就可以了,但是有些项目就爬的时候可能会遇到GBK编码的。
遇到GBK编码的时候simplexml_load_string就会报错用不了,以下代码具有自动检测是否GBK编码并成功转JSON。

源代码

<?php
//调用
echo json_encode(xml($_REQUEST['url']),JSON_UNESCAPED_UNICODE);

//xml转JSON
function xml($url){
    $api = Encod($url);
    $str = str_replace(array("\n", "\r"), " ", $api);
    preg_match('/encoding="(.*)"/U', $str, $match);
    if ($match[1] == 'gbk') {
        $html = str_replace("gbk", "UTF-8", $str);
    } else {
        $html = $str;
    }
    $xml = simplexml_load_string($html, 'SimpleXMLElement', LIBXML_NOCDATA);
    $json = json_encode($xml, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
    $data = json_decode($json, true);
    return $data;
}
//编码检测
function Encod($url){
    $api = file_get_contents($url);
    $string = preg_match('/^.*$/u', $api) > 0;
    if ($string == true) {
        $value = $api;
    } else {
        $value = mb_convert_encoding($api, "UTF-8", "GBK");
    }
    return $value;
}
声明:若无特殊注明,本文为《蓝优》原创,转载请保留文章出处。