[Mapbender-dev] json_encode, ISO-8859-1, Ticket 171

Thomas Baschetti info at thomas-baschetti.de
Tue Sep 15 12:35:26 EDT 2009


Christoph Baudson schrieb:
> Thomas Baschetti schrieb:
>> Hi,
>>
>> while exploring http://trac.osgeo.org/mapbender/ticket/171
>> i got a little bit stuck.
>> The problem seems to in
>>
>> mod_addWMSfromfilteredList_server.php
>>
>> the line
>>
>> $output = $json->encode($resultObj);
>>
>> which fails if the database is not UTF-8 but ISO-8859-1
>> see http://de.php.net/manual/en/function.json-encode.php
>> "This function only works with UTF-8 encoded data." If you use e.g. 
>> german umlauts in ISO you will get "Oberfl" instead of "Oberfläche".
>> So, converting values to UTF-8 is necessary, but when and where?
>> Right after retrieving the values from the database or just before
>> using json_encode? And are other files affected, too?
>
> Hi Thomas,
>
> please check the method "encode" of http/classes/class_json.php
>
> We could make the change there...
>
> Hope this helps
>
> Christoph
ok,
i tried the following in http/classes/class_json.php
(see http://de.php.net/manual/de/function.json-encode.php#72450)
-------snipp----------------------
/**
        * Converts incoming to UTF-8 for json_encode
        *
        */

        private function json_fix_charset($var)
        {
            if (is_array($var)) {
                $new = array();
                foreach ($var as $k => $v) {
                    $new[$this->json_fix_charset($k)] = 
$this->json_fix_charset($v);
                }
                $var = $new;
            } elseif (is_object($var)) {
                $vars = get_class_vars(get_class($var));
                foreach ($vars as $m => $v) {
                    $var->$m = $this->json_fix_charset($v);
                }
            } elseif (is_string($var)) {
                $var = utf8_encode($var);
            }
            return $var;
        }

        /**
         * Encodes an object to JSON
         */
        public function encode($anObject) {
                if ($this->library == JSON_PEAR) {
                        $pear = new Services_JSON();
                        $e = new mb_notice("using PEAR JSON");
                        return $pear->encode($anObject);
                }
                $e = new mb_notice("using native JSON");
                return json_encode($anObject);
                //return json_encode($this->json_fix_charset($anObject));
        }
-------snipp----------------------

which works for Add WMS from filtered List (hooray), and
breaks "Load WMC from list" (boo), because now all is converted to UTF-8...

Hm, i have to think about this a little more...

Ciao
Thomas

-- 

Thomas Baschetti - Systemanalyse Geographische Informationssysteme
Hakenstraße 8D
49074 Osnabrück

Tel: 0541 25 91 90 | mobil 01577 189 25 91
E-Mail: info at thomas-baschetti.de
www.thomas-baschetti.de
Ust-IdNr.: DE264355072



More information about the Mapbender_dev mailing list