1

PHP経由でcsvファイルを読み取り、配列をjsonファイルに保存したいと思います。

 $fp = fopen('images/thermo.csv','r') or die("**! can't open file\n\n");
    setlocale(LC_ALL, 'sk_SK.UTF-8');
    $i = 0;
    while($csv_line = fgetcsv($fp,10024,';')) {
        $i++;
        $json[$i]['nazov'] = $csv_line[0];
        $json[$i]['popis'] = $csv_line[1];
        $json[$i]['cena'] = $csv_line[2];
            $json[$i]['img'] = $csv_line[3];
         $json[$i]['mnozstvo'] = $csv_line[4];
    }
    $json['total_lines'] = $i;
    //print json_encode($json);

    fclose($fp) or die("**! can't close file\n\n");

    $fn = fopen('cennik.json', 'w');
    fwrite($fn, json_encode($json));
    fclose($fn);

.csvファイルは

Murovacia tvarnica 25 a;?;15,4;img2.jpg;m2
Murovacia tvárnica 35;á;23,1;img1.jpg;m2
Murovacia tvárnica 44;helo test;31,9;img3.jpg;m2

jsonファイルは有効ですが、この「á」の代わりに「null」..または「」(空)が含まれています

{
    "1": {
        "nazov": "Murovacia tvarnica 25 a",
        "popis": "?",
        "cena": "15,4",
        "img": "img2.jpg",
        "mnozstvo": "m2"
    },
    "2": {
        "nazov": null,
        "popis": "",
        "cena": "23,1",
        "img": "img1.jpg",
        "mnozstvo": "m2"
    },
    "3": {
        "nazov": null,
        "popis": "helo test",
        "cena": "31,9",
        "img": "img3.jpg",
        "mnozstvo": "m2"
    },
    "total_lines": 3
}

誰かが私に何が間違っているのか説明できますか?ありがとうございました

4

2 に答える 2

1

どうやら、PHP の文字列は ISO-8859-1 であるため、最初にutf8_encode(ここでも) 値を取得する必要があります。

そう、

$json[$i]['nazov'] = $csv_line[0];

なるはず

$json[$i]['nazov'] = utf8_encode($csv_line[0]);

UTF-8 文字を含む可能性のある他の文字列もエンコードする必要があります。

utf8_decodeどのような環境であっても、JSON から値を取得するときに、おそらくそれらが必要になるでしょう。

于 2013-02-20T13:54:01.360 に答える
0

@crushこれは.csvです

Murovacia tvárnica 25;čokolvek nieč aké taký;15,4;img2.jpg;m2
Murovacia tvárnica 35;čokolvek nieč aké taký;23,1;img1.jpg;m2
Murovacia tvárnica 44;čokolvek nieč aké taký;31,9;img3.jpg;m2
Prekladová tvárnica 25;čokolvek nieč aké taký;3,85;;bm
Prekladová tvárnica 35;čokolvek nieč aké taký;5,91;;bm
Prekladová tvárnica 44;čokolvek nieč aké taký;8,8;;bm
Vencová tvárnica 25;čokolvek nieč aké taký;3,3;;bm
Vencová tvárnica 35;čokolvek nieč aké taký;5,5;;bm
Vencová tvárnica 44;čokolvek nieč aké taký;8,25;;bm
Koncový diel;čokolvek nieč aké taký;0,33;;ks

json ファイルは (JSONLINT 経由で) 次のとおりです。

{
    "1": {
        "nazov": "Murovacia tvárnica 25",
        "popis": "okolvek nieè aké taký",
        "cena": "15,4",
        "img": "img2.jpg",
        "mnozstvo": "m2"
    },
    "2": {
        "nazov": "Murovacia tvárnica 35",
        "popis": "okolvek nieè aké taký",
        "cena": "23,1",
        "img": "img1.jpg",
        "mnozstvo": "m2"
    },
    "3": {
        "nazov": "Murovacia tvárnica 44",
        "popis": "okolvek nieè aké taký",
        "cena": "31,9",
        "img": "img3.jpg",
        "mnozstvo": "m2"
    },
    "4": {
        "nazov": "Prekladová tvárnica 25",
        "popis": "okolvek nieè aké taký",
        "cena": "3,85",
        "img": "",
        "mnozstvo": "bm"
    },
    "5": {
        "nazov": "Prekladová tvárnica 35",
        "popis": "okolvek nieè aké taký",
        "cena": "5,91",
        "img": "",
        "mnozstvo": "bm"
    },
    "6": {
        "nazov": "Prekladová tvárnica 44",
        "popis": "okolvek nieè aké taký",
        "cena": "8,8",
        "img": "",
        "mnozstvo": "bm"
    },
    "7": {
        "nazov": "Vencová tvárnica 25",
        "popis": "okolvek nieè aké taký",
        "cena": "3,3",
        "img": "",
        "mnozstvo": "bm"
    },
    "8": {
        "nazov": "Vencová tvárnica 35",
        "popis": "okolvek nieè aké taký",
        "cena": "5,5",
        "img": "",
        "mnozstvo": "bm"
    },
    "9": {
        "nazov": "Vencová tvárnica 44",
        "popis": "okolvek nieè aké taký",
        "cena": "8,25",
        "img": "",
        "mnozstvo": "bm"
    },
    "10": {
        "nazov": "Koncový diel",
        "popis": "okolvek nieè aké taký",
        "cena": "0,33",
        "img": "",
        "mnozstvo": "ks"
    }
}

文字が同じではないことがわかりますか?čokolvek nieč aké taký != okolvek nieè aké taký ...

phpは同じです:

$fp = fopen('images/thermo.csv','r') or die("**! can't open file\n\n");

$i = 0;
while($csv_line = fgetcsv($fp,10024,';')) {
    $i++;
    $json[$i]['nazov'] = utf8_encode($csv_line[0]);
    $json[$i]['popis'] = utf8_encode($csv_line[1]);
    $json[$i]['cena'] = $csv_line[2];
        $json[$i]['img'] = $csv_line[3];
     $json[$i]['mnozstvo'] = $csv_line[4];
}

fclose($fp) or die("**! can't close file\n\n");

$fn = fopen('cennik.json', 'w');
fwrite($fn, json_encode($json));
fclose($fn);

jQuery .getJSON は次のとおりです。

jQuery.getJSON( "web_beta/cennik.json" , function(data){
    var myBoxes = ''
        jQuery.each(data,function(key,value){

            var priceDPH = parseFloat(parseFloat(value.cena) * 1.2).toFixed(2);
            myBoxes += '<div id="no_'+key+'" class="box"> <div class="pic">'
            myBoxes += '<a href="web_beta/images/thermoimg/type'+key+'/'+value.img+'" id="mb'+key+'" class="s5mb" title="'+value.nazov+'">'
            myBoxes += '<img src="web_beta/images/thermoimg/type'+key+'/'+value.img+'" width="45%" class="boxed" alt="" />'
            myBoxes += '</a></div>'
            myBoxes += '<h3>'+value.nazov+'</h3><p class="description">'+value.popis+'</p>'
            myBoxes += '<input type="text" id="name_'+key+'" class="boxin" value="0"><p class="thePrice">Cena: <span class="price">'+priceDPH+'</span> €/'+value.mnozstvo+'(s DPH)'
            myBoxes += '</p> <span class="send">Pridať do zoznamu<strong>+</strong></span></div>'
            var divider = parseFloat( key / 2 );
            if( (divider - parseInt(divider)) == 0 ) {

                myBoxes += '<div class="new"></div>'

            }

        });
    jQuery('#bigbox').children().remove();
        jQuery('#bigbox').append(myBoxes);

    });
于 2013-02-20T16:50:58.757 に答える