通常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;
}