2009-11-16 52 views
15

我的Zend_Json在這裏編碼一個對象。我編碼的關聯數組有兩個元素: 元素一是另一個關聯數組,而元素2是一個HTML字符串。他正在蠢蠢欲動,Html字符串部分只包含NULL !!?!?!?!?Zend_JSON:編碼搞亂了 - 爲什麼?

繼承人的元素未編碼當我做了的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} 

通知末 - HTML的堆積如山的悶響 - 由空.... whats發生在這裏走了更換:(


編輯

經過一番研究,我發現這個錯誤在我的錯誤日誌:

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... 

我在這裏難倒:(


SOLUTION

WOO HOOO !!!!我想通了:我只是通過utf8_encode函數運行html字符串變量,然後運行JSON編碼功能:

$ result ['html'] = utf8_encode($ result ['html']);

它的工作原理 - 謝謝大家對所有幫助的人 - 我感到嚴重受限,因爲無法爲這裏的每個帖子投票超過一次 - 你一直都是粉絲的幫助:D再次感謝! !

+0

I()前一段時間曾與PHP的json_encode同樣的問題。在舊的PHP版本(<5.2.7)中,在這個函數中有一些嚴重的UTF-8錯誤。你使用什麼PHP版本? – Huppie 2009-11-16 13:08:03

+0

補充說明:看起來像你的php錯誤表明了這個確切的問題。 – Huppie 2009-11-16 13:09:55

+0

哦,親愛的 - 有沒有其他的方式:( – Ali 2009-11-16 13:29:43

回答

12

通過將PHP版本更新爲版本5.2.7以後的版本,可以解決此問題。

PHP json_encode在該版本之前有一個serious UTF-8 bug。有關更多詳細信息,請參見changelog


既然你注意,你正在使用PHP版本5.2.9.2您的版本應該是不錯的:)您是否嘗試過通過PHP的json_encode()手動佈置HTML的具體內容?可以通過utf8_encode()utf8_decode()

+0

我會在這一個上與Huppie一起 – 2009-11-16 13:27:06

+0

我只注意到: - S我的Php版本是5.2.9-2 - 是不是很好? – Ali 2009-11-16 13:32:13

+0

我不知道如何手動 - 我需要什麼代碼我只是調用一個簡單的: Zend_Json ::編碼($ obj) – Ali 2009-11-16 13:54:52

2

我只看到一個可能的區域,從Encoder.php返回NULL。我做這個函數裏面的一些var_dumps開始調試在的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; 
} 

我不明白爲什麼你的HTML字符串將不被認定爲這樣的,但我可能會嘗試在編碼之前對其進行類型化。

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

Typecasting根本不工作:(我' m試圖在你提到的函數中添加一些var_dumps ...給我一陣 – Ali 2009-11-16 12:52:27

+0

檢查我的更新...我在這裏得到一個UTF相關的警告 – Ali 2009-11-16 13:01:54

1

這通常發生在使用substr()或在具有多字節字母的utf-8字符串上使用$somestring[0]。使用mb_前綴的函數來編輯這類數據,那麼你不會有問題,json_encode()