新浪天气接口XML处理方式,最终转成数组使用代码

来源:互联网 发布:淘宝退款原因有影响吗 编辑:程序博客网 时间:2024/06/06 06:41
<?php
//强制页面UTF-8编码
//header("Content-Type: text/html;charset=UTF-8");
$local = trim($_GET["city"]);
//根据不同的浏览器,返回不同的urlencode编码
if (strpos($_SERVER["HTTP_USER_AGENT"], "MSIE"))
    //IE系列无需强制转码成GB2312后再编码,否则会在每个编码中间产生%00的垃圾数据,导至无法使用
    {
    echo "Internet Explorer" . "<br><br>";
    echo urlencode($local) . "<br><br>";
    $ct = urlencode($local);
} else { //其它浏览器需先强制mb_convert_encoding转码成GB2312后再编码
    echo "Non Internet Explorer" . "<br><br>";
    echo urlencode(mb_convert_encoding($local, "gb2312", "UTF-8")) . "<br><br>";
    $ct = urlencode(mb_convert_encoding($local, "gb2312", "UTF-8"));
}
//将要访问的新浪天气接口
$url = "http://php.weather.sina.com.cn/xml.php?city=" . $ct .
    "&password=DJOYnieT8234jlsK&day=0";
//开始获得天气数据
$html = file_get_contents($url);
//echo $html;
$xml = simplexml_load_string($html);
//var_dump($xml);   //查看现对象内容
//echo "<br><br>";
//将XML内容先转成JSON再转成ARRAY的数组内容
$xml = json_decode(json_encode($xml), true);


//print_r($xml);    //整理XML数据
//echo "<br><br>";


//数据使用方法
if (count($xml, 1) <= 1) {
    //不知道为啥开头已经是UTF-8编码了,但这里直接显示中文就是乱码,实际是GB2312的,所以强制转了下
//找到原因了,将该文件的编码格式改为UTF-8保存就可以了
    //echo mb_convert_encoding("城市名称写的不对,或无该城市天气", "UTF-8", "gb2312");
echo "城市名称写的不对,或无该城市天气";
    echo "<br><br>";
    echo count($xml, 1);
} else {
//使用数组中的内容
    echo trim($xml['Weather']['city'])."<br><br>";
    var_dump($xml);
    echo "<br><br>";
    echo count($xml, 1);
}
?>
0 0
原创粉丝点击