My Zend_Json is messing up in encoding an object here. I'm encoding an associative array which has two elements: Element one is another associative array while element 2 is an HTML string. He's goofing up such that the Html string part contains just NULL!!?!?!?!?

Heres the element UNencoded when I do a var_dump on it...sorry for the looong element... Its very erratic - I don't understand whats wrong here...

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>',
)

And here's what happens when I try to encode it in JSON using Zends_JSON class...

{"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}

Notice at the end - the humongous clunk of HTML - GONE replaced by a null.... whats happening here :(


EDIT

After some investigation I found this error in my error logs:

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

I think it might have something to do with the problem I'm facing? How do I fix this?


EDIT

My version of Php is 5.2.9-2 - I doubt this is due to the issue which was in versions earlier than 5.2.7... help here guys please!!!


EDIT

Running the object through json_encode() returns the same result and I get the same error:

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

I'm stumped here :(


SOLUTION

WOO HOOO!!!! I figured it out: I just run the html string variable through a utf8_encode function and then run the JSON encode function on it:

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

And it works - Thanks everybody for all the help guys - I feel heavily confined by not being able to vote more than once for each of the posts here - you've all been a fanstastic help :D Thanks again!!!

Comments

I had the same problem with PHP's json_encode() some time ago. There where some serious bugs with UTF-8 in this function in older PHP versions (< 5.2.7). What PHP version are you using?

Written by Huppie

Note to add: It seems like the php-error you have indicates this exact problem.

Written by Huppie

Oh dear - is there some other way around this :(

Written by Ali

I just noticed :-S my version of Php is 5.2.9-2 - isn't that good enough?

Written by Ali

Accepted Answer

You fix this by updating your PHP version to a version later than version 5.2.7.

There was a serious UTF-8 bug in PHP's json_encode function before that version. See the changelog for more details.


Since you note that you are using PHP version 5.2.9.2 your version should be good :) Have you tried routing the specific contents of the html through PHP's json_encode() manually?

Or maybe through utf8_encode() or utf8_decode()?

Written by Huppie
This page was build to provide you fast access to the question and the direct accepted answer.
The content is written by members of the stackoverflow.com community.
It is licensed under cc-wiki