目次
ディスカッションへの返信 (解決策)
ホームページ バックエンド開発 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 が出力した内容を以下の URL に入力して確認してください
JSON を簡単に作成する

$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
[ismobilecard] =>新しいストアの特別なオファーから[img] => .jpg
......

json は gbk エンコードをサポートしていないことをご存知ですか? エラーや文字化けは報告されませんが、gbk はサポートされていないと公式に述べられています

簡単にまとめておきます。 :
1 .json は gbk エンコーディングをサポートしていません;
2.array_walk_recursive($t, 'togbk'); // gbk エンコーディングが必要なため、php でコード
json_decode() を変換する必要があります。 if json 中に中国語のデータが含まれているため、解析できません

tripslashes($abc);//エスケープの可能性を削除します

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

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のバックエンドでReactアプリを構築する:パート2、React LaravelのバックエンドでReactアプリを構築する:パート2、React Mar 04, 2025 am 09:33 AM

LaravelのバックエンドでReactアプリを構築する:パート2、React

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelテストでの簡略化されたHTTP応答のモッキング

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPのカール:REST APIでPHPカール拡張機能を使用する方法

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

Codecanyonで12の最高のPHPチャットスクリプト

Laravelの通知 Laravelの通知 Mar 04, 2025 am 09:22 AM

Laravelの通知

See all articles