목차
回复讨论(解决方案)
백엔드 개발 PHP 튜토리얼 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;}?>
로그인 후 복사


回复讨论(解决方案)

关键词为"玻璃移门"时,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" }   }
로그인 후 복사

你在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);}
로그인 후 복사
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);//去掉可能存在的转义

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

11 최고의 PHP URL 쇼트너 스크립트 (무료 및 프리미엄) 11 최고의 PHP URL 쇼트너 스크립트 (무료 및 프리미엄) Mar 03, 2025 am 10:49 AM

11 최고의 PHP URL 쇼트너 스크립트 (무료 및 프리미엄)

Instagram API 소개 Instagram API 소개 Mar 02, 2025 am 09:32 AM

Instagram API 소개

Laravel의 플래시 세션 데이터로 작업합니다 Laravel의 플래시 세션 데이터로 작업합니다 Mar 12, 2025 pm 05:08 PM

Laravel의 플래시 세션 데이터로 작업합니다

Laravel Back End : Part 2, React가있는 React 앱 구축 Laravel Back End : Part 2, React가있는 React 앱 구축 Mar 04, 2025 am 09:33 AM

Laravel Back End : Part 2, React가있는 React 앱 구축

Laravel 테스트에서 단순화 된 HTTP 응답 조롱 Laravel 테스트에서 단순화 된 HTTP 응답 조롱 Mar 12, 2025 pm 05:09 PM

Laravel 테스트에서 단순화 된 HTTP 응답 조롱

PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법 PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법 Mar 14, 2025 am 11:42 AM

PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법

Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트 Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트 Mar 13, 2025 pm 12:08 PM

Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트

라 라벨에서 알림 라 라벨에서 알림 Mar 04, 2025 am 09:22 AM

라 라벨에서 알림

See all articles