Inhaltsverzeichnis
回复讨论(解决方案)
Heim Backend-Entwicklung PHP-Tutorial php如何解析json,jsonm_decode有时可以,有时不行

php如何解析json,jsonm_decode有时可以,有时不行

Jun 23, 2016 pm 02:17 PM

本帖最后由 cnaaa8 于 2013-06-21 09:55:14 编辑

网页编码GB2312(“注意这点,比较重要”),代码如下
当这里关键词为"玻璃移门"时,就无法解析json,但生成的url直接通过浏览器访问就有数据,如果关键词为"手机",就可以正常解析json,file_get_contents得到的数据貌似是utf-8的格式

<?phpprint_r(getKwToData('玻璃移门'));//当这里关键词为"玻璃移门"时,就无法解析json,但生成的url直接通过浏览器访问就有数据,如果关键词为"手机",就可以正常解析jsonfunction getKwToData($kw,$page=1,$condition=''){	if(empty($kw)){		return false;	}	if (preg_match("/^([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){1}/",$kw) == true || preg_match("/([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){1}$/",$kw) == true || preg_match("/([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){2,}/",$kw) != true)	{		$kw=iconv('gbk','utf-8',$kw);	}		$randIp='110.75.71.20';		$url="http://".$randIp."/search_turn_page_iphone.htm?sort=".$condition."&q=".urlencode($kw)."&page=".$page."&showMode=list";		$url=iconv('gbk','utf-8',$url);//生成的url		$data=file_get_contents($url);//这里不管什么关键词都可以获取网页数据			$listItem=json_decode($data);//当这里关键词为"玻璃移门"时,就无法解析json,但生成的url直接通过浏览器访问就有数据,如果关键词为"手机",就可以正常解析json		return $listItem->listItem;}function getLocalIp(){//获得用户ip	if(isset($_SERVER['HTTP_CLIENT_IP'])){			 $ip=$_SERVER['HTTP_CLIENT_IP'];		}elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){			 $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];		}else{			 $ip=$_SERVER['REMOTE_ADDR'];		}	return $ip;}?>
Nach dem Login kopieren


回复讨论(解决方案)

关键词为"玻璃移门"时,echo $data; 是什么值

关键词为"玻璃移门"时,echo $data; 是什么值

echo 的代码如下,代码太多只能贴出部分,由于是手动截取的listItem节点内的格式可能不正确,或者直接访问(http://110.75.71.20/search_turn_page_iphone.htm?sort=&q=%E7%8E%BB%E7%92%83%E7%A7%BB%E9%97%A8&page=1&showMode=list),注意:我php文件编码是gb2312的,echo 出来的数据在浏览器中必须选utf-8才能正常显示,否则是乱码

{"result":"true","totalPage":"100","catmap":"","ppath":"","category":"移门","auctionTagFlag1":"","auctionTagFlag2":"","auctionTagFlag3":"","listItem":[ {"name":"特价吊门。阳台厨房客厅餐厅隔断推拉门,钛合金材质玻璃隔断移门" ,"img":"http://q.i03.wimg.taobao.com/bao/uploaded/i1/10777020696035707/T12ggQXXBXXXXXXXXX_!!0-item_pic.jpg_90x90.jpg","img2":"http://q.i03.wimg.taobao.com/bao/uploaded/i1/10777020696035707/T12ggQXXBXXXXXXXXX_!!0-item_pic.jpg","iswebp":"","url":"http://a.m.taobao.com/i12812086428.htm?rn=54mFXh1-tGoPo1JS2xg7rHCf0C-90rXM9O-Y7hC&sid=aa444833fda20421","previewUrl":"http://a.m.taobao.com/ajax/pre_view.do?itemId=12812086428&sid=aa444833fda20421","favoriteUrl":"http://fav.m.taobao.com/favorite/to_collection.htm?itemNumId=12812086428&sid=aa444833fda20421", "icon":["0" ], "price":"320.00","originalPrice":"320.00","freight":"0","area":"上海","act":"月售12","itemNumId":"12812086428","nick":"特价移门淋浴房阳台", "wwimUrl":"http://im.m.taobao.com/ww/ad_ww_dialog.htm?item_num_id=12812086428&to_user=zNi829LGw8XB3NSht7%2FR9Myo","category":"50022360","isMobileEcard":"false","auctionType":"b" } , {"name":"卫生间隔断门 阳台玻璃推拉门/拼格门 钢化玻璃移门 新店特惠" ,"img":"http://q.i04.wimg.taobao.com/bao/uploaded/i4/11427033313416399/T1aPluXCdcXXXXXXXX_!!0-item_pic.jpg_90x90.jpg","img2":"http://q.i04.wimg.taobao.com/bao/uploaded/i4/11427033313416399/T1aPluXCdcXXXXXXXX_!!0-item_pic.jpg","iswebp":"","url":"http://a.m.taobao.com/i17422447064.htm?rn=54mFXh1-tGoPo1JS2xg7rHCf0C-90rXM9O-Y7hC&sid=aa444833fda20421","previewUrl":"http://a.m.taobao.com/ajax/pre_view.do?itemId=17422447064&sid=aa444833fda20421","favoriteUrl":"http://fav.m.taobao.com/favorite/to_collection.htm?itemNumId=17422447064&sid=aa444833fda20421", "icon":["0" ], "price":"218.02","originalPrice":"298.00","freight":"10","area":"郑州","act":"月售10","itemNumId":"17422447064","nick":"逸品尚家居", "wwimUrl":"http://im.m.taobao.com/ww/ad_ww_dialog.htm?item_num_id=17422447064&to_user=0t3Gt8nQvNK%2B0w%3D%3D","category":"50022360","isMobileEcard":"false","auctionType":"b" }   }
Nach dem Login kopieren

你在json_decode之前将$data做下面的替换工作就可以了

$data = str_replace('\\', '\\\\', $data);

如果不知道为什么这样做,把$data输出的内容放到下面的网址下做个校验就知道了
Just Make JSON Easy!

$s = file_get_contents('http://110.75.71.20/search_turn_page_iphone.htm?sort=&q=%E7%8E%BB%E7%92%83%E7%A7%BB%E9%97%A8&page=1&showMode=list');$s = stripslashes($s);//去掉可能存在的转义$t = json_decode($s, true);//解码成数组array_walk_recursive($t, 'togbk');//因为你需要的是 gbk 编码的,所以要转一下码print_r($t);function togbk(&$item, $key) {  $item = iconv('utf-8', 'gbk', $item);}
Nach dem Login kopieren
Array
(
    [result] => true
    [totalPage] => 100
    [catmap] => 
    [ppath] => 
    [category] => 移门
    [auctionTagFlag1] => 
    [auctionTagFlag2] => 
    [auctionTagFlag3] => 
    [listItem] => Array
        (
            [0] => Array
                (
                    [name] => 特价吊门。阳台厨房客厅餐厅隔断推拉门,钛合金材质玻璃隔断移门
                    [img] => http://q.i03.wimg.taobao.com/bao/uploaded/i1/10777020696035707/T12ggQXXBXXXXXXXXX_!!0-item_pic.jpg_90x90.jpg
                    [img2] => http://q.i03.wimg.taobao.com/bao/uploaded/i1/10777020696035707/T12ggQXXBXXXXXXXXX_!!0-item_pic.jpg
                    [iswebp] => 
                    [url] => http://a.m.taobao.com/i12812086428.htm?rn=X3mFMh1-jGoPuafkFFhChWPExE-ER1xM9O-wi5D&sid=4d5bc9aee02ed3b0
                    [previewUrl] => http://a.m.taobao.com/ajax/pre_view.do?itemId=12812086428&sid=4d5bc9aee02ed3b0
                    [favoriteUrl] => http://fav.m.taobao.com/favorite/to_collection.htm?itemNumId=12812086428&sid=4d5bc9aee02ed3b0
                    [icon] => Array
                        (
                            [0] => 0
                        )

                    [price] => 320.00
                    [originalPrice] => 320.00
                    [freight] => 0
                    [area] => 上海
                    [act] => 月售12
                    [itemNumId] => 12812086428
                    [nick] => 特价移门淋浴房阳台
                    [wwimUrl] => http://im.m.taobao.com/ww/ad_ww_dialog.htm?item_num_id=12812086428&to_user=zNi829LGw8XB3NSht7%2FR9Myo
                    [category] => 50022360
                    [isMobileEcard] => false
                    [auctionType] => b
                )

            [1] => Array
                (
                    [name] => 卫生间隔断门 阳台玻璃推拉门/拼格门 钢化玻璃移门 新店特惠
                    [img] => http://q.i04.wimg.taobao.com/bao/uploaded/i4/11427033313416399/T1aPluXCdcXXXXXXXX_!!0-item_pic.jpg_90x90.jpg
......

你难道不知道json不支持gbk编码么?虽然不会报错也不会出现乱码,但官方已经声明不支持gbk。所以就出现你说的这种情况了。

我来总结一番:
1.json不支持gbk编码;
2.array_walk_recursive($t, 'togbk');//因为你需要的是 gbk 编码的,所以要转一下码

php中json_decode();解析json数据,如果json里有中文数据,是解析不了的。

stripslashes($abc);//去掉可能存在的转义

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

11 beste PHP -URL -Shortener -Skripte (kostenlos und Premium) 11 beste PHP -URL -Shortener -Skripte (kostenlos und Premium) Mar 03, 2025 am 10:49 AM

11 beste PHP -URL -Shortener -Skripte (kostenlos und Premium)

Einführung in die Instagram -API Einführung in die Instagram -API Mar 02, 2025 am 09:32 AM

Einführung in die Instagram -API

Arbeiten mit Flash -Sitzungsdaten in Laravel Arbeiten mit Flash -Sitzungsdaten in Laravel Mar 12, 2025 pm 05:08 PM

Arbeiten mit Flash -Sitzungsdaten in Laravel

Erstellen Sie eine React -App mit einem Laravel -Back -Ende: Teil 2, reagieren Erstellen Sie eine React -App mit einem Laravel -Back -Ende: Teil 2, reagieren Mar 04, 2025 am 09:33 AM

Erstellen Sie eine React -App mit einem Laravel -Back -Ende: Teil 2, reagieren

Vereinfachte HTTP -Reaktion verspottet in Laravel -Tests Vereinfachte HTTP -Reaktion verspottet in Laravel -Tests Mar 12, 2025 pm 05:09 PM

Vereinfachte HTTP -Reaktion verspottet in Laravel -Tests

Curl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIs Curl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIs Mar 14, 2025 am 11:42 AM

Curl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIs

12 Beste PHP -Chat -Skripte auf Codecanyon 12 Beste PHP -Chat -Skripte auf Codecanyon Mar 13, 2025 pm 12:08 PM

12 Beste PHP -Chat -Skripte auf Codecanyon

Benachrichtigungen in Laravel Benachrichtigungen in Laravel Mar 04, 2025 am 09:22 AM

Benachrichtigungen in Laravel

See all articles