ホームページ >バックエンド開発 >PHPチュートリアル >PHP json は中国語の文字列を解析できませんか? ? ?
今日は非常に奇妙な問題に遭遇しました。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;?>]}
私が言えることは、これだけです取得した 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
能帮我远程弄一下么? 我用了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));
如果向你这么写,为啥我的会报错呢?
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 を取得した後
echo base64_encode(substr($output, 0, 200));
結果を投稿する
$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
問題は解決されました。ご協力いただきありがとうございます。