2009-11-16 13 views
15

मेरा Zend_Json यहां किसी ऑब्जेक्ट को एन्कोड करने में गड़बड़ कर रहा है। मैं एक एसोसिएटिव सरणी एन्कोड कर रहा हूं जिसमें दो तत्व हैं: तत्व एक अन्य सहयोगी सरणी है जबकि तत्व 2 एक HTML स्ट्रिंग है। वह इस तरह गुम हो रहा है कि एचटीएमएल स्ट्रिंग भाग में सिर्फ नल !! !!!?!?!Zend_JSON: एन्कोड गड़बड़ाना - क्यों?

यहाँ तत्व unencoded जब मैं उस पर एक var_dump कर ... looong तत्व के लिए खेद है ... इसकी बहुत अनिश्चित है - मैं क्या गलत यहाँ समझ में नहीं आता ...

array (
    'map' => 
    array (
    0 => 
    array (
     'id' => '1403', 
     'name' => 'Amborovy Airport (Philibert Tsiranana Airport)', 
     'label' => 'Amborovy Airport (Philibert Tsiranana Airport)', 
     'html' => 'Amborovy Airport (Philibert Tsiranana Airport)', 
     'lat' => '-0.666944', 
     'lng' => '46.3517', 
    ), 
    1 => 
    array (
     'id' => '6160', 
     'name' => 'Generalissimo Francisco de Miranda Airbase', 
     'label' => 'Generalissimo Francisco de Miranda Airbase', 
     'html' => 'Generalissimo Francisco de Miranda Airbase', 
     'lat' => '0.485', 
     'lng' => '-66.8436', 
    ), 
    2 => 
    array (
     'id' => '7808', 
     'name' => 'Tirana International Airport', 
     'label' => 'Tirana International Airport', 
     'html' => 'Tirana International Airport', 
     'lat' => '41.4150929722', 
     'lng' => '19.7233001667', 
    ), 
    3 => 
    array (
     'id' => '20881', 
     'name' => 'Tiranë Heliport', 
     'label' => 'Tiranë Heliport', 
     'html' => 'Tiranë Heliport', 
     'lat' => 41.315865416667, 
     'lng' => 19.888245972222, 
    ), 
    4 => 
    array (
     'id' => '5218', 
     'name' => 'Abadan Airport', 
     'label' => 'Abadan Airport', 
     'html' => 'Abadan Airport', 
     'lat' => '0.371111', 
     'lng' => '48.2283', 
    ), 
    5 => 
    array (
     'id' => '5330', 
     'name' => 'Lar Airport', 
     'label' => 'Lar Airport', 
     'html' => 'Lar Airport', 
     'lat' => '0.673056', 
     'lng' => '54.3814', 
    ), 
    6 => 
    array (
     'id' => '7808', 
     'name' => 'Tirana International Airport', 
     'label' => 'Tirana International Airport', 
     'html' => 'Tirana International Airport', 
     'lat' => '41.4150929722', 
     'lng' => '19.7233001667', 
    ), 
    7 => 
    array (
     'id' => '20881', 
     'name' => 'Tiranë Heliport', 
     'label' => 'Tiranë Heliport', 
     'html' => 'Tiranë Heliport', 
     'lat' => 41.315865416667, 
     'lng' => 19.888245972222, 
    ), 
    8 => 
    array (
     'id' => '5218', 
     'name' => 'Abadan Airport', 
     'label' => 'Abadan Airport', 
     'html' => 'Abadan Airport', 
     'lat' => '0.371111', 
     'lng' => '48.2283', 
    ), 
    9 => 
    array (
     'id' => '5225', 
     'name' => 'Ahvaz Airport', 
     'label' => 'Ahvaz Airport', 
     'html' => 'Ahvaz Airport', 
     'lat' => '0.337431', 
     'lng' => '48.762', 
    ), 
    10 => 
    array (
     'id' => '5242', 
     'name' => 'Ardabil Airport', 
     'label' => 'Ardabil Airport', 
     'html' => 'Ardabil Airport', 
     'lat' => '0.325556', 
     'lng' => '48.4242', 
    ), 
    11 => 
    array (
     'id' => '5243', 
     'name' => 'Asalouyeh Airport', 
     'label' => 'Asalouyeh Airport', 
     'html' => 'Asalouyeh Airport', 
     'lat' => '0.481389', 
     'lng' => '52.6153', 
    ), 
    12 => 
    array (
     'id' => '5251', 
     'name' => 'Bandar Abbas International Airport', 
     'label' => 'Bandar Abbas International Airport', 
     'html' => 'Bandar Abbas International Airport', 
     'lat' => '0.218056', 
     'lng' => '56.3778', 
    ), 
    13 => 
    array (
     'id' => '5259', 
     'name' => 'Birjand Airport', 
     'label' => 'Birjand Airport', 
     'html' => 'Birjand Airport', 
     'lat' => '0.898056', 
     'lng' => '59.2661', 
    ), 
    14 => 
    array (
     'id' => '5278', 
     'name' => 'Dezful Airport', 
     'label' => 'Dezful Airport', 
     'html' => 'Dezful Airport', 
     'lat' => '0.434444', 
     'lng' => '48.3976', 
    ), 
    15 => 
    array (
     'id' => '5306', 
     'name' => 'Jiroft Airport', 
     'label' => 'Jiroft Airport', 
     'html' => 'Jiroft Airport', 
     'lat' => '0.726944', 
     'lng' => '57.6703', 
    ), 
    16 => 
    array (
     'id' => '5326', 
     'name' => 'Konarak Airport', 
     'label' => 'Konarak Airport', 
     'html' => 'Konarak Airport', 
     'lat' => '0.443333', 
     'lng' => '60.3819', 
    ), 
    17 => 
    array (
     'id' => '5330', 
     'name' => 'Lar Airport', 
     'label' => 'Lar Airport', 
     'html' => 'Lar Airport', 
     'lat' => '0.673056', 
     'lng' => '54.3814', 
    ), 
    18 => 
    array (
     'id' => '5331', 
     'name' => 'Lavan Airport', 
     'label' => 'Lavan Airport', 
     'html' => 'Lavan Airport', 
     'lat' => '0.810278', 
     'lng' => '53.3561', 
    ), 
    19 => 
    array (
     'id' => '5359', 
     'name' => 'Parsabad-Moghan Airport', 
     'label' => 'Parsabad-Moghan Airport', 
     'html' => 'Parsabad-Moghan Airport', 
     'lat' => '0.603606', 
     'lng' => '47.8815', 
    ), 
    20 => 
    array (
     'id' => '5361', 
     'name' => 'Persian Gulf Airport (Khalije Fars Airport)', 
     'label' => 'Persian Gulf Airport (Khalije Fars Airport)', 
     'html' => 'Persian Gulf Airport (Khalije Fars Airport)', 
     'lat' => '0.379444', 
     'lng' => '52.7375', 
    ), 
    21 => 
    array (
     'id' => '5393', 
     'name' => 'Shahid Sadooghi Airport', 
     'label' => 'Shahid Sadooghi Airport', 
     'html' => 'Shahid Sadooghi Airport', 
     'lat' => '0.905', 
     'lng' => '54.2764', 
    ), 
    22 => 
    array (
     'id' => '5411', 
     'name' => 'Tabriz International Airport', 
     'label' => 'Tabriz International Airport', 
     'html' => 'Tabriz International Airport', 
     'lat' => '0.133889', 
     'lng' => '46.235', 
    ), 
    23 => 
    array (
     'id' => '1416', 
     'name' => 'Arrachart Airport', 
     'label' => 'Arrachart Airport', 
     'html' => 'Arrachart Airport', 
     'lat' => '-0.349167', 
     'lng' => '49.2917', 
    ), 
    24 => 
    array (
     'id' => '7808', 
     'name' => 'Tirana International Airport', 
     'label' => 'Tirana International Airport', 
     'html' => 'Tirana International Airport', 
     'lat' => '41.4150929722', 
     'lng' => '19.7233001667', 
    ), 
    25 => 
    array (
     'id' => '20881', 
     'name' => 'Tiranë Heliport', 
     'label' => 'Tiranë Heliport', 
     'html' => 'Tiranë Heliport', 
     'lat' => 41.315865416667, 
     'lng' => 19.888245972222, 
    ), 
), 
    'html' => '<div><b>Search Results for terms \'Iran\'</b> </div><a class="map-link" href="javascript:void(0);" onclick="toggleMapsSearch(\'name\');">4 results of Names with "Iran"</a><div id="map-results-name" class="map-results-nubbin" style="display:none;"><a class="map-sub-links" href="javascript:mapClickHandler(\'1403\')">Amborovy Airport (Philibert Ts<span Style="color:red; Font-weight:bold;">Iran</span>ana Airport)</a><a class="map-sub-links" href="javascript:mapClickHandler(\'6160\')">Generalissimo Francisco De M<span Style="color:red; Font-weight:bold;">Iran</span>da Airbase</a><a class="map-sub-links" href="javascript:mapClickHandler(\'7808\')">T<span Style="color:red; Font-weight:bold;">Iran</span>a International Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'20881\')">T<span Style="color:red; Font-weight:bold;">Iran</span>ë Heliport</a></div><a class="map-link" href="javascript:void(0);" onclick="toggleMapsSearch(\'city\');">4 results of Cities with "Iran"</a><div id="map-results-city" class="map-results-nubbin" style="display:none;"><a class="map-sub-links" href="javascript:mapClickHandler(\'5218\')">Abadan, <span Style="color:red; Font-weight:bold;">Iran</span> : Abadan Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'5330\')">Lar, <span Style="color:red; Font-weight:bold;">Iran</span> : Lar Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'7808\')">T<span Style="color:red; Font-weight:bold;">Iran</span>a : Tirana International Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'20881\')">T<span Style="color:red; Font-weight:bold;">Iran</span>a : Tiranë Heliport</a></div><a class="map-link" href="javascript:void(0);" onclick="toggleMapsSearch(\'country\');">15 results of Countries with "Iran"</a><div id="map-results-country" class="map-results-nubbin" style="display:none;"><a class="map-sub-links" href="javascript:mapClickHandler(\'5218\')"><span Style="color:red; Font-weight:bold;">Iran</span> : Abadan Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'5225\')"><span Style="color:red; Font-weight:bold;">Iran</span> : Ahvaz Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'5242\')"><span Style="color:red; Font-weight:bold;">Iran</span> : Ardabil Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'5243\')"><span Style="color:red; Font-weight:bold;">Iran</span> : Asalouyeh Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'5251\')"><span Style="color:red; Font-weight:bold;">Iran</span> : Bandar Abbas International Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'5259\')"><span Style="color:red; Font-weight:bold;">Iran</span> : Birjand Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'5278\')"><span Style="color:red; Font-weight:bold;">Iran</span> : Dezful Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'5306\')"><span Style="color:red; Font-weight:bold;">Iran</span> : Jiroft Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'5326\')"><span Style="color:red; Font-weight:bold;">Iran</span> : Konarak Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'5330\')"><span Style="color:red; Font-weight:bold;">Iran</span> : Lar Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'5331\')"><span Style="color:red; Font-weight:bold;">Iran</span> : Lavan Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'5359\')"><span Style="color:red; Font-weight:bold;">Iran</span> : Parsabad-Moghan Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'5361\')"><span Style="color:red; Font-weight:bold;">Iran</span> : Persian Gulf Airport (Khalije Fars Airport)</a><a class="map-sub-links" href="javascript:mapClickHandler(\'5393\')"><span Style="color:red; Font-weight:bold;">Iran</span> : Shahid Sadooghi Airport</a><a class="map-sub-links" href="javascript:mapClickHandler(\'5411\')"><span Style="color:red; Font-weight:bold;">Iran</span> : Tabriz International Airport</a></div>', 
) 

और यहाँ क्या होता है जब मैं Zends_JSON वर्ग का उपयोग कर JSON में यह सांकेतिक शब्दों में बदलना करने की कोशिश है ...

{"map":[{"id":"1403","name":"Amborovy Airport (Philibert Tsiranana Airport)","label":"Amborovy Airport (Philibert Tsiranana Airport)","html":"Amborovy Airport (Philibert Tsiranana Airport)","lat":"-0.666944","lng":"46.3517"},{"id":"6160","name":"Generalissimo Francisco de Miranda Airbase","label":"Generalissimo Francisco de Miranda Airbase","html":"Generalissimo Francisco de Miranda Airbase","lat":"0.485","lng":"-66.8436"},{"id":"7808","name":"Tirana International Airport","label":"Tirana International Airport","html":"Tirana International Airport","lat":"41.4150929722","lng":"19.7233001667"},{"id":"20881","name":null,"label":null,"html":null,"lat":41.315865416667,"lng":19.888245972222},{"id":"5218","name":"Abadan Airport","label":"Abadan Airport","html":"Abadan Airport","lat":"0.371111","lng":"48.2283"},{"id":"5330","name":"Lar Airport","label":"Lar Airport","html":"Lar Airport","lat":"0.673056","lng":"54.3814"},{"id":"7808","name":"Tirana International Airport","label":"Tirana International Airport","html":"Tirana International Airport","lat":"41.4150929722","lng":"19.7233001667"},{"id":"20881","name":null,"label":null,"html":null,"lat":41.315865416667,"lng":19.888245972222},{"id":"5218","name":"Abadan Airport","label":"Abadan Airport","html":"Abadan Airport","lat":"0.371111","lng":"48.2283"},{"id":"5225","name":"Ahvaz Airport","label":"Ahvaz Airport","html":"Ahvaz Airport","lat":"0.337431","lng":"48.762"},{"id":"5242","name":"Ardabil Airport","label":"Ardabil Airport","html":"Ardabil Airport","lat":"0.325556","lng":"48.4242"},{"id":"5243","name":"Asalouyeh Airport","label":"Asalouyeh Airport","html":"Asalouyeh Airport","lat":"0.481389","lng":"52.6153"},{"id":"5251","name":"Bandar Abbas International Airport","label":"Bandar Abbas International Airport","html":"Bandar Abbas International Airport","lat":"0.218056","lng":"56.3778"},{"id":"5259","name":"Birjand Airport","label":"Birjand Airport","html":"Birjand Airport","lat":"0.898056","lng":"59.2661"},{"id":"5278","name":"Dezful Airport","label":"Dezful Airport","html":"Dezful Airport","lat":"0.434444","lng":"48.3976"},{"id":"5306","name":"Jiroft Airport","label":"Jiroft Airport","html":"Jiroft Airport","lat":"0.726944","lng":"57.6703"},{"id":"5326","name":"Konarak Airport","label":"Konarak Airport","html":"Konarak Airport","lat":"0.443333","lng":"60.3819"},{"id":"5330","name":"Lar Airport","label":"Lar Airport","html":"Lar Airport","lat":"0.673056","lng":"54.3814"},{"id":"5331","name":"Lavan Airport","label":"Lavan Airport","html":"Lavan Airport","lat":"0.810278","lng":"53.3561"},{"id":"5359","name":"Parsabad-Moghan Airport","label":"Parsabad-Moghan Airport","html":"Parsabad-Moghan Airport","lat":"0.603606","lng":"47.8815"},{"id":"5361","name":"Persian Gulf Airport (Khalije Fars Airport)","label":"Persian Gulf Airport (Khalije Fars Airport)","html":"Persian Gulf Airport (Khalije Fars Airport)","lat":"0.379444","lng":"52.7375"},{"id":"5393","name":"Shahid Sadooghi Airport","label":"Shahid Sadooghi Airport","html":"Shahid Sadooghi Airport","lat":"0.905","lng":"54.2764"},{"id":"5411","name":"Tabriz International Airport","label":"Tabriz International Airport","html":"Tabriz International Airport","lat":"0.133889","lng":"46.235"},{"id":"1416","name":"Arrachart Airport","label":"Arrachart Airport","html":"Arrachart Airport","lat":"-0.349167","lng":"49.2917"},{"id":"7808","name":"Tirana International Airport","label":"Tirana International Airport","html":"Tirana International Airport","lat":"41.4150929722","lng":"19.7233001667"},{"id":"20881","name":null,"label":null,"html":null,"lat":41.315865416667,"lng":19.888245972222}],"html":null} 

सूचना अंत में - एचटीएमएल के humongous clunk - एक अशक्त .... क्या यहाँ हो रहा द्वारा प्रतिस्थापित चला :(


संपादित

कुछ जांच मैं अपने त्रुटि लॉग में इस त्रुटि पाया करने के बाद:

PHP Warning: json_encode() [<a href='function.json-encode'>function.json-encode</a>]: Invalid UTF-8 sequence in argument in C:\wamp\www\fltdata\library\Zend\Json.php 

मुझे लगता है कि समस्या का सामना करना पड़ रहा हूँ के साथ कुछ हो सकता है? मैं यह कैसे तय करुं?


संपादित

Php की मेरी संस्करण 5.2.9-2 है - मुझे शक है इस मुद्दे जो 5.2.7 से पहले के संस्करणों में था की वजह से है ... यहाँ लोग कृपया मदद !!!


संपादित

json_encode के माध्यम से वस्तु() चल रहा है एक ही परिणाम देता है और मैं एक ही त्रुटि मिलती है:

PHP Warning: json_encode() [<a href='function.json-encode'>function.json-encode</a>]: Invalid UTF-8 sequence in argument in... 

मैं यहाँ स्टम्प्ड हूँ :(


समाधान

वू हू !!!! मैंने इसे समझ लिया: मैं सिर्फ एक utf8_encode फ़ंक्शन के माध्यम से HTML स्ट्रिंग चर चलाता हूं और उसके बाद JSON एन्कोड फ़ंक्शन चलाता हूं:

$ परिणाम ['html'] = utf8_encode ($ result ['html']);

और यह काम करता है - सभी मदद लोगों के लिए धन्यवाद - मुझे यहां प्रत्येक पोस्ट के लिए एक से अधिक बार मतदान करने में सक्षम नहीं होने से बहुत सीमित महसूस होता है - आप सभी एक प्रशंसनीय सहायता कर चुके हैं: डी धन्यवाद फिर से !! !

+0

के साथ समस्या नहीं होगी, मुझे कुछ समय पहले PHP के json_encode() के साथ एक ही समस्या थी। वहां पुराने PHP संस्करणों (<5.2.7) में इस फ़ंक्शन में यूटीएफ -8 के साथ कुछ गंभीर बग हैं। आप किस PHP संस्करण का उपयोग कर रहे हैं? – Huppie

+0

जोड़ने के लिए नोट: ऐसा लगता है कि यह php-error है जो आपने इस सटीक समस्या को इंगित किया है। – Huppie

+0

ओह प्रिय - क्या इसके आसपास कुछ और तरीका है :( – Ali

उत्तर

12

आप इसे अपने PHP संस्करण को संस्करण 5.2.7 के बाद संस्करण में अपडेट करके ठीक कर सकते हैं।

उस संस्करण से पहले PHP के json_encode फ़ंक्शन में serious UTF-8 bug था। अधिक जानकारी के लिए changelog देखें।


जब से तुम ध्यान दें कि आप PHP संस्करण 5.2.9.2 का उपयोग कर रहे अपने संस्करण अच्छा होना चाहिए :) आप() मैन्युअल रूप से PHP के json_encode के माध्यम से एचटीएमएल के विशिष्ट सामग्री मार्ग की कोशिश की?

या शायद utf8_encode() या utf8_decode() के माध्यम से?

+0

मैं इस पर हूपी के साथ जाऊंगा। –

+0

मैंने अभी देखा: - एस PHP का मेरा संस्करण 5.2.9-2 है - क्या यह पर्याप्त नहीं है? – Ali

+0

मुझे यकीन नहीं है कि मैन्युअल रूप से ऐसा कैसे करें - मुझे कोड करने की क्या ज़रूरत है, मैं बस एक साधारण कॉल कर रहा हूं: Zend_Json :: एनकोड ($ obj) – Ali

2

मुझे केवल एक संभावित क्षेत्र दिखाई देता है जहां एनओएलएल एनकोडर.एफपी से वापस किया जा सकता है। मैं Zend/JSON/Encoder.php

protected function _encodeDatum(&$value) 
{ 
    $result = 'null'; 

    if (is_int($value) || is_float($value)) { 
     $result = (string) $value; 
     $result = str_replace(",", ".", $result); 
    } elseif (is_string($value)) { 
     $result = $this->_encodeString($value); 
    } elseif (is_bool($value)) { 
     $result = $value ? 'true' : 'false'; 
    } 

    return $result; 
} 

में इस समारोह के अंदर कुछ var_dumps करके डिबगिंग शुरू होता मैं काफी यकीन है कि तुम क्यों एचटीएमएल स्ट्रिंग के रूप में मान्यता नहीं दी जाएगी कर रहे हैं नहीं कर रहा हूँ, लेकिन मैं एन्कोडिंग से पहले टाइपकास्टिंग का प्रयास कर सकते हैं।

array('html' => (string) $yourHtmlStr); 
+0

टाइपकास्टिंग बिल्कुल काम नहीं कर रहा है :(मैं ' मैं आपके द्वारा वर्णित फ़ंक्शन में कुछ var_dumps जोड़ने की कोशिश कर रहा हूं ... थोड़ी देर के लिए – Ali

+0

मेरा अपडेट जांचें ... मुझे यहां यूटीएफ से संबंधित चेतावनी मिल रही है – Ali

1

यह आमतौर पर तब होता है जब आप substr() का उपयोग करते हैं या $somestring[0] का उपयोग utf-8 स्ट्रिंग पर करते हैं जिसमें मल्टीबाइट अक्षरों होते हैं। इस प्रकार के डेटा को संपादित करने के लिए mb_ प्रीफ़िक्स्ड फ़ंक्शंस का उपयोग करें, तो आपको json_encode()

संबंधित मुद्दे