Thema: JSON UTF8

  1. #1
    Avatar von Benzol
    Registriert seit
    16.12.2013
    Beiträge
    215
    Thanked 87 Times in 54 Posts

    Standard JSON UTF8

    Ich habe das 1. mal JSON benutzt und durfte dabei gleich feststellen dass json_encode keine Sonderzeichen mag. Nach stundenlangem rumsuchen bin ich darauf gestoßen dass man vorher UTF8 kodieren muss damit json_encode nicht nur null zurückgibt. Damit so etwas nerviges nicht noch mal passiert möchte ich eine Funktion schreiben die mir JSON generiert und vorher UTF8 kodiert.

    Was ich bis jetzt versucht habe
    PHP-Code:
    function JsonEncoding($data){
        if(
    is_array($data)){
            
    $data array_map('utf8_encode'$data);
        }else{
            
    $data utf8_encode($data);
        }
        
    $data json_encode($data);
        return 
    $data;

    Mit normalen Texten geht es
    PHP-Code:
    echo Json_Encoding("täst"); 
    =
    "t\u00e4st"
    Aber wenn ich z.b. so was mache
    PHP-Code:
    echo Json_Encoding(array('täst' => 'lol')); 
    bekomm ich wieder null
    Ich möchte gerne eine Funktion machen die ALLES automatisch mit UTF8 kodiert damit ich vergessen kann dass diese Drecks Funktion das nicht automatisch macht. Will nicht noch mal 2 stunden rumsuchen. Warum geht array_map nicht?

    - - - Aktualisiert - - -

    PHP-Code:
    function JsonEncoding($data){
        if(
    is_array($data)){
            
    array_walk_recursive($data'encode_items');
        }else{
            
    $data utf8_encode($data);
        }
        
    $data json_encode($data);
        return 
    $data;
    }
    function 
    encode_items(&$item, &$key){
        
    $key utf8_encode($key);
        
    $item utf8_encode($item);

    Das geht aber nur für das rechts im Array.
    PHP-Code:
    var_dump(JsonEncoding(array('test' => 'tääst')));
    var_dump(JsonEncoding(array('tääst' => 'tääst'))); 
    string '{"test":"t\u00e4\u00e4st"}' (length=26)
    string '{null:"t\u00e4\u00e4st"}' (length=24)
    WAS IST DAS FÜR EIN MIST?

  2. #2
    Avatar von DMW007
    Registriert seit
    15.11.2011
    Beiträge
    6.210
    Thanked 9.132 Times in 3.006 Posts
    Blog Entries
    5

    Standard AW: JSON UTF8

    Die Schlüssel eines Arrays kann man so in PHP nicht verändern, auch nicht über Zeiger. An einem zweiten Array führt also kein Weg vorbei.

    PHP-Code:
        /**
         * Kodiert ein komplettes Array rekursiv mittels utf8_encode
         * @param array $data Zu kodierendes Array
         * @return array
         */
        
    function recursiveUTF8Encode($data) {
            if(
    is_array($data)) {
                
    $utf8Encoded = array();
                foreach(
    $data as $key => $value) {
                    
    $utf8Encoded[utf8_encode($key)] = recursiveUTF8Encode($value);
                }
                return 
    $utf8Encoded;
            }else {
                return 
    utf8_encode($data);
            }
        } 
    PHP-Code:
    $test = array(
        
    'täst' => array(
            
    'täst2' => array(
                
    'täst3' => 'täst4'
            
    ),
        )
    );
    $json json_encode(recursiveUTF8Encode($test));
    var_dump($json);
    var_dump(json_decode($jsontrue)); 
    Code:
    string '{"t\u00e4st":{"t\u00e4st2":{"t\u00e4st3":"t\u00e4st4"}}}' (length=56)
    array (size=1)
      'täst' => 
        array (size=1)
          'täst2' => 
            array (size=1)
              'täst3' => string 'täst4' (length=6)


  3. The Following User Says Thank You to DMW007 For This Useful Post:

    Benzol (06.06.2014)

Ähnliche Themen

  1. VB.Net Suche Pattern für JSON String
    Von exception im Forum .Net
    Antworten: 4
    Letzter Beitrag: 12.02.2014, 01:28
  2. VB.Net Json String richtig parsen???
    Von soulreafer im Forum .Net
    Antworten: 1
    Letzter Beitrag: 06.07.2013, 17:15
  3. Suche AutoIt JSON-Decoder
    Von IchBinz im Forum Skriptsprachen
    Antworten: 1
    Letzter Beitrag: 19.02.2012, 11:09
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.