ホームページ  >  記事  >  バックエンド開発  >  JSON関連の問題

JSON関連の問題

WBOY
WBOYオリジナル
2016-06-13 13:42:31854ブラウズ

ヘルプ JSON の問題
はこんな感じです。 js 側では二次元配列のデータを返しますが、

が文字化けしてしまいます。
出力 HTML が間違っていて、データをループアウトできませんか? ?

専門家のアドバイスをお願いします。


js:

JScript コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->        html='<table>';
        var i,size,result;
        url='stock.php';
        $.post(url,
            function(data){
            result  = eval('(' + data + ')');    
            size = result.length;
            for (i = 1; i < size; i++) {
                html += "<tr><td>" + result[i][1] + "</td><td>" + result[i][2]+ "</td><td>" + result[i][3] + "</td></tr>";
            }
        });
        html+='</table>';
        alert(html);




サーバー:
PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--><?php

$url = 'http://data.stock.hexun.com/quotes/stock_4.htm';
$content = @file_get_contents($url);
preg_match('/<table width=\"100%\"[^>]*>(.*)<\/table>/isU', $content,$str);
preg_match_all('/<tr>(.*)<\/tr>/isU', $str[0],$strs);
foreach ($strs[0] as $value){
    //$pingyings = str_replace('__', '', $pingying);
    preg_match_all('/(<td[^>]*>|<th[^>]*>)(.*)(<\/td>|<\/th>|<\/div>)/isU', $value,$strs);
    $zhishu[] = $strs[2];
}

for($i=1,$size=count($zhishu); $i<$size; $i++){
    $zhishu[$i][0] = str_replace('<div>', '', $zhishu[$i][0]);
    //$zhishu[$i][0] = iconv('gbk', 'utf-8', $zhishu[$i][0]);
}
die(JSON($zhishu));


function arrayRecursive(&$array, $function, $apply_to_keys_also = false)
{
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            arrayRecursive($array[$key], $function, $apply_to_keys_also);
        } else {
            $array[$key] = $function($value);
        }

        if ($apply_to_keys_also && is_string($key)) {
            $new_key = $function($key);
            if ($new_key != $key) {
                $array[$new_key] = $array[$key];
                unset($array[$key]);
            }
        }
    }
}

function JSON($array) {
 arrayRecursive($array, 'urlencode', true);
 $json = json_encode($array);
 return urldecode($json);
}



-----解決策---------------------------- -
js に戻るのは次のような文字列です

[["株式市場名", "最新", "増加/減少%"],["ダウ ジョーンズ","13194.10 ","+0.12%"],["ナスダック","3040.73","+0.03%"],["S&P 500","1394.28","-0.12%"],["フランスCAC40","3564.51 ","+0.40%" ],["日経225","10123.06","+0.72%"],["英国FTSE","5945.43","-0.18%"],["オーストラリア全株", "4366.90"," -0.20%"]]

その形式は JavaScript Object Notation (JSON) の規則に準拠していないため、eval によって 1 次元配列に解析することしかできません (js は多次元配列の概念はありません)

次のことについて私が小言を言う必要はありません。
------解決策-----------
#1.php エンコードを指定するリターンヘッダーを追加gb2312 の場合、または直接 gbk
PHP コード
<?php
header("コンテンツタイプ:text/html;charset=gbk");
$url = 'http://data.stock.hexun.com/quotes/stock_4.htm';
...
...
...
?>
<br><font color="#e78608">------解決策----------------------</font><br>データによると、解決策は 1 つだけです-次元配列 <br> ループ エラーは <br> です。 1. 開始点が間違っています。配列の添字は 0 から始まりますが、1 から開始します。 <br> 2. 明らかに 1 次元配列ですが、それを扱います。二次元なので当然です 記事は間違っています<br><br>データは 3 つのグループに分かれています<br>for (i = 0; i <size i></size> html += " <tr><td>" + result[i] + "</td><td>" + result[i+1]+ "</td><td>" + result[i+ 2] + "</td> </tr>";<br>}<br>
<br><font color="#e78608">------解決策---------</font><br>php を使用して 2 次元のものを作成するだけです<div class="clear"></div>
</td>
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。