ホームページ >バックエンド開発 >PHPチュートリアル >PHP json は中国語の文字列を解析できませんか? ? ?

PHP json は中国語の文字列を解析できませんか? ? ?

WBOY
WBOYオリジナル
2016-06-23 14:21:001521ブラウズ

今日は非常に奇妙な問題に遭遇しました。json_decode を使用するときに、中国語の文字グループが解析できませんでした。中国語のフィールドを削除すると解析できるようになりました。

	$nodeAry=array();	while($row=mssql_fetch_array($rs)){		$description=strstr("//","",$row['description']);	   array_push($nodeAry,'{"fchrItemID":"'.$row["fchrItemID"].'","fchrItemTypeID":"'.$row["fchrItemTypeID"].'","fchrItemName":"'.$row["fchrItemName"].'","flotQuotePrice":"'.$row["flotQuotePrice"].'","description":"'.trim($description).'","fdtmLastModifyTime":"'.$row["fdtmLastModifyTime"].'","sales_volume":"'.$row["sales_volume"].'"}');    }	$tbstr=implode(',',$nodeAry);   ?>{"table":[<?=$tbstr;?>]}


このフィールドを削除してください。は私が分析した方法ですが、どこにエラーがあるのか​​わかりません。誰か助けてくれませんか?


ディスカッションへの返信(解決策)

PHP の json 関数は、utf-8 でエンコードされた文字列に対してのみ有効です

まず文字列を utf-8 でエンコードされた文字列に変換してからデコードする必要があります

私が言えることは、これだけです取得した JSON は標準に達していません。中国語は uxxxx 形式である必要があります

エンコードを utf-8 エンコードに設定しましたが、まだ機能しません

取得した JSON は規格外であるとしか言えません仕様では、中国語は uxxxx 形式である必要があります

抽出されたデータにバックスラッシュが含まれるのはなぜですか?自分で追加しますか?


私のデータはリモート データベースから取得されていますが、影響はありますか?

正しい形式である限り、データを投稿したほうがよいでしょう。問題ありません

 header("Content-Type:text/html; charset=utf-8");		$ch = curl_init();	curl_setopt($ch, CURLOPT_URL, $remoteAPIBasePath . "sync2shop_api/item.php");	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);	curl_setopt($ch, CURLOPT_HEADER, 0);	$output = curl_exec($ch);		curl_close($ch);		$obj=json_decode(iconv("gb2312","utf-8",$output));	var_dump( $obj);	//$obj=json_decode($output);	$rscount=count($obj->table);		$han=fopen("debug.php","a");	fwrite($han,$output."---------".$rscount);	fclose($han);
$s = '{"a":"我的","b":"数据","c":["是从远程数据库","取的"],"d":"难道会有影响吗?"}';$s = iconv('gbk', 'utf-8', $s);print_r(json_decode($s));

正しい形式である限り、データを投稿した方がよいでしょう。問題ありません

stdClass Object(    [a] => 我的    [b] => 数据    [c] => Array        (            [0] => 是从远程数据库            [1] => 取的        )    [d] => 难道会有影响吗?)
$s = '{"a":"我的","b":"数据","c":["是从远程数据库","取的"],"d":"难道会有影响吗?"}';$s = iconv('gbk', 'utf-8', $s);print_r(json_decode($s));


一部だけを傍受しました。データが多すぎます。見てみるのを手伝ってください。

えー

人はどこですか。 。 。 。

$s =<<< TXT{"table":[{"fchrItemID":"1E7D5286-7379-4B6E-B63C-0081596B808F","fchrItemTypeID":"17E0A935-E0FF-4488-B2F0-CC9F2926C001","fchrItemName":"H13222S13","flotQuotePrice":"499.000000","description":"高密度的丝光棉面料,手工钉珠的人像艺术款。","fdtmLastModifyTime":"","sales_volume":""},{"fchrItemID":"E82E5A29-A1BD-4F53-AD65-0147906E224D","fchrItemTypeID":"73A4E44D-7BF7-49CF-9A75-DCC805D93FDB","fchrItemName":"H13143C04","flotQuotePrice":"799.000000","description":"","fdtmLastModifyTime":"","sales_volume":""},{"fchrItemID":"A7FD2243-D39C-49D5-9785-01DD923FA60E","fchrItemTypeID":"17E0A935-E0FF-4488-B2F0-CC9F2926C001","fchrItemName":"H13222C04","flotQuotePrice":"499.000000","description":"丝光棉显示高档感,图形用胶印和钉珠的复杂工艺而非普通大众品牌较多使用的平面印花印制,彰显独特的设计点。","fdtmLastModifyTime":"","sales_volume":""},{"fchrItemID":"4E82D694-CA4C-4134-92BA-027EE10B9100","fchrItemTypeID":"17E0A935-E0FF-4488-B2F0-CC9F2926C001","fchrItemName":"H13222C35","flotQuotePrice":"499.000000","description":"高级丝光棉,蜻蜓为元素的创意有趣的图案和品牌logo和金属贴片的再组合方式呈现艺术感的品牌特性。","fdtmLastModifyTime":"","sales_volume":""},{"fchrItemID":"6D129F91-1869-47BE-9AED-02A0E156B120","fchrItemTypeID":"6DC7F007-C0EB-45FE-94F1-4C792B8FEB23","fchrItemName":"H13456C14","flotQuotePrice":"3899.000000","description":"","fdtmLastModifyTime":"","sales_volume":"0"},{"fchrItemID":"6FA0B24C-6C17-43BB-ACAE-04369F73FE8D","fchrItemTypeID":"17E0A935-E0FF-4488-B2F0-CC9F2926C001","fchrItemName":"H13222C21","flotQuotePrice":"499.000000","description":"","fdtmLastModifyTime":"","sales_volume":""},{"fchrItemID":"A875F37E-503E-4F25-BCEC-04BA7A53D18F","fchrItemTypeID":"6FD4DF7E-3F1E-4B04-90EF-189664ADD3EA","fchrItemName":"H13111C13","flotQuotePrice":"599.000000","description":"","fdtmLastModifyTime":"","sales_volume":""},{"fchrItemID":"4C3E6DFB-F4CE-404D-930D-04BE6591965F","fchrItemTypeID":"6FD4DF7E-3F1E-4B04-90EF-189664ADD3EA","fchrItemName":"H13111C12","flotQuotePrice":"699.000000","description":"高支高密的全棉面料,前胸对称的色块拼接设计款。","fdtmLastModifyTime":"","sales_volume":""}]}TXT;$s = iconv('gbk', 'utf-8', $s);print_r(json_decode($s));
stdClass Object
(
    [table] => Array
        (
            [0] => stdClass Object
                (
                    [fchrItemID] => 1E7D5286-7379-4B6E-B63C-0081596B808F
                    [fchrItemTypeID] => 17E0A935-E0FF-4488-B2F0-CC9F2926C001
                    [fchrItemName] => H13222S13
                    [flotQuotePrice] => 499.000000
                    [description] => 高密度的丝光棉面料,手工钉珠的人像艺术款。
                    [fdtmLastModifyTime] => 
                    [sales_volume] => 
                )

            [1] => stdClass Object
                (
                    [fchrItemID] => E82E5A29-A1BD-4F53-AD65-0147906E224D
                    [fchrItemTypeID] => 73A4E44D-7BF7-49CF-9A75-DCC805D93FDB
                    [fchrItemName] => H13143C04
                    [flotQuotePrice] => 799.000000
                    [description] => 
                    [fdtmLastModifyTime] => 
                    [sales_volume] => 
                )

            [2] => stdClass Object
                (
                    [fchrItemID] => A7FD2243-D39C-49D5-9785-01DD923FA60E
                    [fchrItemTypeID] => 17E0A935-E0FF-4488-B2F0-CC9F2926C001
                    [fchrItemName] => H13222C04
                    [flotQuotePrice] => 499.000000
                    [description] => 丝光棉显示高档感,图形用胶印和钉珠的复杂工艺而非普通大众品牌较多使用的平面印花印制,彰显独特的设计点。
                    [fdtmLastModifyTime] => 
[販売ボリューム] => [fchrItemID] => 4E82D694-CA4C-4134-92BA-027EE10B9100 [fchrItemTypeID] => 17E0A935-E0FF-4488-B2F0 -CC9F2926C001
[fchritemname] = & GT; C35
[Flotquoteprice] = & GT; 499.000000
[説明] = & gt; ハイレベルのシルクライトコットン、要素としてのトンボのクリエイティブとブランドロゴとメタルパッチの再組み合わせブランドの特徴 1-1869-47be- 9Aed-02A0E156B120
[fchrItemTypeID] => 6DC7F007-C0EB-45FE-94F1-4C792B8FEB23
[flotQuotePrice] => 3899.000000
[売上高] = > 0
] => 6FA0B24C-6C17-43BB-ACAE-04369F73FE8D
[FCHRITEMNAME] = & GT; H13222C21
[Flotquoteprice] = & GT;
[fdtmlastmodifytime] = & gt;                     [sales_volume] => 
                )

            [6] => stdClass Object
                (
                    [fchrItemID] => A875F37E-503E-4F25-BCEC-04BA7A53D18F
                    [fchrItemTypeID] => 6FD4DF7E-3F1E-4B04-90EF-189664ADD3EA
                    [fchrItemName] => H13111C13
                    [flotQuotePrice] => 599.000000
                    [description] => 
                    [fdtmLastModifyTime] => 
                    [sales_volume] => 
                )

            [7] => stdClass Object
                (
                    [fchrItemID] => 4C3E6DFB-F4CE-404D-930D-04BE6591965F
                    [fchrItemTypeID] => 6FD4DF7E-3F1E-4B04-90EF-189664ADD3EA
                    [fchrItemName] => H13111C12
                    [flotQuotePrice] => 699.000000
                    [description] => 高支高密的全棉面料,前胸对称的色块拼接设计款。
                    [fdtmLastModifyTime] => 
                    [sales_volume] => 
                )

        )

)

能帮我远程弄一下么? 我用了curl_init(),curl_exec() ,输出流,获取的 

$ch = curl_init();	curl_setopt($ch, CURLOPT_URL, $remoteAPIBasePath . "sync2shop_api/item.php");	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);	curl_setopt($ch, CURLOPT_HEADER, 0);	$output = curl_exec($ch);		curl_close($ch);			$obj=json_decode(iconv("gb2312","utf-8",$output));	
 

能帮我远程弄一下么? 我用了curl_init(),curl_exec() ,输出流,获取的 

$ch = curl_init();	curl_setopt($ch, CURLOPT_URL, $remoteAPIBasePath . "sync2shop_api/item.php");	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);	curl_setopt($ch, CURLOPT_HEADER, 0);	$output = curl_exec($ch);		curl_close($ch);			$obj=json_decode(iconv("gb2312","utf-8",$output));	
 


这里的$output 打印出来就是json的东西,不是直接写在里面的 

如果向你这么写,为啥我的会报错呢?

 header("Content-Type:text/html; charset=utf-8");		$ch = curl_init();	curl_setopt($ch, CURLOPT_URL, $remoteAPIBasePath . "sync2shop_api/item.php");	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);	curl_setopt($ch, CURLOPT_HEADER, 0);	$output = curl_exec($ch);	curl_close($ch);		$obj=<<< TXT var_dump($output) TXT;	$obj=json_decode(iconv("gb2312","utf-8",$output));		echo count($obj->table);



程序文件保存为UTF-8编码。
item.php那个文件的字符集是什么?是否有转码的必要?
一般从GBK转UTF-8比较好。

如果想用json_decode解析gbk编码。很容易。只要转换为utf8编码既可。
具体实现和原因可以查看这篇日志
http://www.bo56.com/%E5%9C%A8php%E4%B8%AD%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8json_decode%E8%A7%A3%E6%9E%90gbk%E7%BC%96%E7%A0%81%E7%9A%84json%E5%AD%97%E7%AC%A6%E4%B8%B2/

在php中如何使用json_decode解析gbk编码的json字符串

プログラム ファイルは UTF-8 エンコードで保存されます。
item.php ファイルの文字セットは何ですか?トランスコードは必要ですか?
一般的には、GBK から UTF-8 に変換することをお勧めします。

item ファイルは utf-8 です

$output は、curl を使用して item.php から取得されます
そして、item.php は utf-8 です
次に、
まず item.php とその関連ファイルに BOM ヘッダーがあるかどうかを確認します
次に確認しますデータベースから読み取られたコンテンツが utf-8 かどうか

$output は、curl を使用して item.php から取得されます
、item.php は utf-8 です
次に、
まず item.php とその関連ファイルを確認します ファイルに BOM があるかどうかheader
次に、データベースから読み取られたコンテンツが utf-8 であるかどうかを確認します

出力から、utf-8 を見ると、項目ファイルには BOM がありません
しかし、json_decode($output) を使用すると、次のことがわかりますカウントが 0 であること、または json の解析に問題があるかどうか

$obj=json_decode(iconv("gb2312","utf-8",$output));
var_dump( $obj); $obj を使用して、完全な json 形式かどうかを確認します。

$output =curl_exec($ch);

$output を取得した後
echo base64_encode(substr($output, 0, 200));
結果を投稿する

$output =curl_exec($ch);

$OUTPUT を取得するt t t echo base64_encode (substr ($ OUTPUT, 0, 200)); リモート json データ

データを変更していますか?

データを変更していますか?

リモート データを同期し、ローカル データベースに挿入しています。リモート JSON は渡され、解析できないため、ローカルには何もありません

次に、http://218.85.194.210:8888/sync2shop_api/ から取得します。 item.php データに中国語はありません

item.php はリモートで UTF-8 なので、取得した item.php 内のデータも UTF-8 であるため、トランスコードする必要はありません。

最初に json の urlencode、次に urldecode


問題は解決されました。ご協力いただきありがとうございます。

暗号化・復号化機能を使ってjson送信を実装してみました...

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