+ Antworten
Ergebnis 1 bis 10 von 10
  1. #1
    Registriert seit
    Oct 2011
    Ort
    Hattersheim (Hessen)
    Beiträge
    6,866

    Standard Problem mit trim

    Ich habe folgende Daten und möchte überflüssige Daten am Anfang und Ende entfernen. Normalerweise funktioniert das auch mit trim nur leider nicht in dem konkreten Fall.

    Hat jemand eine Idee warum das nicht funktioniert bzw. was man machen muss um bei den Daten überflüssige Zeichen zu entfernen?

    PHP-Code:

    $payload 
    'var wifimac="20:22:31:cb:98:67
    ";
    var wifitype="7601
    ";
    '
    ;

    $data explode(';'$payload);
            
    array_pop($data);
            foreach (
    $data as $info_device) {
           
    $info_device trim($info_device);
           
    var_dump($info_device);
           
    //var_export($info_device);
            

    Ergibt bei mir leider
    Code:
    string(33) "var wifimac="20:32:33:cb:98:67
    ""
    string(21) "var wifitype="7601
    ""

  2. #2
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    9,591

    Die Frage enthält keinen Bezug zum SDK, somit habe ich sie in den PHP Bereich verschoben.
    Wenn du weißt welche Zeichen das sind, kannst du bei Trim diese Zeichen als zweiten Parameter übergeben.
    Michael
    Geändert von Nall-chan (23.08.19 um 07:29 Uhr)
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  3. #3
    Registriert seit
    Oct 2011
    Ort
    Hattersheim (Hessen)
    Beiträge
    6,866

    Zitat Zitat von Nall-chan Beitrag anzeigen
    Wenn du weißt welche Zeichen das sind, kannst du bei Trim ein Array mit diesen Zeichen als zweiten Parameter übergeben.
    Grundsätzlich weis ich was das für Zeichen sind aber dennoch wird da nichts entfernt. Es handelt sich wohl um <LF>und >CR>
    also 0d 0a aber das sollte ja an sich schon im Standard von trim entfernt werden.

    Name:  payload.png
Hits: 95
Größe:  12.1 KB

    Hast Du noch eine Idee was das sein kann warum das nicht geht?

  4. #4
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    9,591

    Ist alles richtig.
    Trim entfernt das aber nur am Anfang und Ende.
    Bei dir ist das mitten im String. Dannach kommt ja noch ein doppeltes Hochkomma.
    Michael
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  5. #5
    Registriert seit
    Oct 2011
    Ort
    Hattersheim (Hessen)
    Beiträge
    6,866

    Zitat Zitat von Nall-chan Beitrag anzeigen
    Trim entfernt das aber nur am Anfang und Ende.
    Bei dir ist das mitten im String. Dannach kommt ja noch ein doppeltes Hochkomma.
    Ah ok, danke. Hast Du zufällig noch eine Idee wie man das richtig machen müsste bzw. der Code lauten müsste um sowohl das Hochkomma zu entfernen als auch die überflüssigen Leerzeichen und <CR> und <LF>?

    Edit:
    Habe das jetzt wie folgt gelöst
    PHP-Code:
    $var_content trim($info[1], '"');
    $var_content trim($var_content); 
    Geändert von Fonzo (23.08.19 um 08:06 Uhr)

  6. #6
    Registriert seit
    Aug 2019
    Beiträge
    6

    Post alternativ Lösung

    Wenn das ganze so gelöst wird hast du auch direkt einen Array mit den Daten:

    PHP-Code:
    $payload 'var wifimac="20:22:31:cb:98:67 
    "; 
    var wifitype="7601 
    "; 
    '
    ;
    $payload str_replace(array('"''var '"\r""\n"), '' $payload); 
    $array = [];
    $data explode(';'$payload); 
    array_pop($data); 
    foreach (
    $data as $info_device) {
        
    $thing explode('='$info_device);
        
    $array[$thing[0]] = $thing[1];

    var_dump($array); 
    Till

  7. #7
    Registriert seit
    Oct 2011
    Ort
    Hattersheim (Hessen)
    Beiträge
    6,866

    Zitat Zitat von Parzival Beitrag anzeigen
    Wenn das ganze so gelöst wird hast du auch direkt einen Array mit den Daten:
    Vielen herzlichen Dank. Ich habe noch ein trim ergänzt, sonst hat er mir bei Key und Value noch Leerzeichen mit übernommen, aber so funktioniert es jetzt mit dem Vorschlag wunderbar.
    PHP-Code:
    $payload 'var wifimac="20:22:31:cb:98:67  
    ";  
    var wifitype="7601  
    ";  
    '

    $payload str_replace(array('"''var '"\r""\n"), '' $payload);  
    $array = []; 
    $data explode(';'$payload);  
    array_pop($data);  
    foreach (
    $data as $info_device) { 
        
    $thing explode('='$info_device); 
        
    $array[trim($thing[0])] = trim($thing[1]); 
    }  
    var_dump($array); 
    Danke nochmals.

  8. #8
    Registriert seit
    Oct 2011
    Ort
    Hattersheim (Hessen)
    Beiträge
    6,866

    Standard Ergänzende Frage zum Aufsplitten der Daten

    Hat vielleicht noch jemand einen Vorschlag wie man so was sinnvoll auflöst ohne sich mit ewig viel Code und subbstr , strpos hantieren zu müssen?.

    PHP-Code:
    $payload 'var tour_enable="1";
    var tour_times="1";
    var tour_index="0;1;2;-1;-1;-1;-1;-1";
    var tour_interval="300;300;300;300;300;300;300;300";
    '

    Problem ist das hier sowohl die einzelnen Variablen mit ; getrennt sind als auch bei Values mit mehreren Werten die Werte selber durch ; separiert sind.

  9. #9
    Registriert seit
    Oct 2011
    Ort
    Hattersheim (Hessen)
    Beiträge
    6,866

    Ich hab es jetzt so gelöst:

    PHP-Code:
    $payload 'var tour_enable="1"; 
    var tour_times="1"; 
    var tour_index="0;1;2;-1;-1;-1;-1;-1"; 
    var tour_interval="300;300;300;300;300;300;300;300"; 
    '
    ;  

    $payload str_replace(array("\r""\n"), '' $payload);   
    $array = [];  
    $data explode('";'$payload);   
    array_pop($data); 
    foreach (
    $data as $info_device) {  
        
    $thing explode('='$info_device);
        
    $value trim($thing[1], '"');
        
    $prefix substr(trim($thing[0], ' \n\r' ), 03);
                if (
    $prefix == 'var') {
                    
    $var_name    substr(trim($thing[0]), 4);
                }
                else 
                {
                    
    $var_name trim($thing[0]);
                }
        
    $array[$var_name] = $value;  
    }   
    var_dump($array); 

  10. #10
    Registriert seit
    Jul 2014
    Ort
    Hannover
    Beiträge
    176

    Vielleicht so?

    PHP-Code:

    $r 
    = [];
    preg_match_all('/="(.*)";/',$payload,$r);

    var_export($r[1]);
    // oder
    preg_match_all('/var (.*)="(.*)";/',$payload,$r);
    var_export($r[1]); // Var namen
    var_export($r[2]);// var daten

    // Combine
    $r array_combine($r[1], $r[2]);
    var_export ($r);

    // oder .. denke dies ist etwas für dich...
    $r = [];
    preg_match_all('/var (.*)="(.*)";/',$payload,$r);
    $r array_combine($r[1], array_map(function($i){return explode(';',$i);},$r[2]) );
    var_export ($r); 

    cu Xaver
    Geändert von Tierfreund (23.08.19 um 12:16 Uhr)

Ähnliche Themen

  1. interessantes Problem mit RequestAction in Verbindung mit Slidern und Touch
    Von Silberstreifen im Forum Entwicklung mit PHP-SDK/Delphi-SDK
    Antworten: 6
    Letzter Beitrag: 25.07.19, 14:27
  2. Antworten: 18
    Letzter Beitrag: 26.05.19, 20:23
  3. Problem mit Reverse Proxy mit ARR und Rewrite im IIS und Version 3.0
    Von Strichcode im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 2
    Letzter Beitrag: 07.10.13, 14:13
  4. IPS redet nicht mit mir...Problem mit Text-to-Speech
    Von dpoessl im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 1
    Letzter Beitrag: 23.11.12, 08:54
  5. Problem mit Rollladensteuerung mit FS20 RST
    Von Buegeleisen im Forum Skripte, PHP, SQL
    Antworten: 3
    Letzter Beitrag: 19.06.07, 07:58