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?



$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


string(33) "var wifimac="20:32:33:cb:98:67
""
string(21) "var wifitype="7601
""

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

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.

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

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

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


$var_content = trim($info[1], '"');
$var_content = trim($var_content);

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

$payload = 'var wifimac="20:22:31:cb:98:67 
"; 
var wifitype="7601 
"; 
';
$payload = str_replace(array('"', 'var ', "\r", "
"), '' , $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

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.


$payload = 'var wifimac="20:22:31:cb:98:67  
";  
var wifitype="7601  
";  
'; 
$payload = str_replace(array('"', 'var ', "\r", "
"), '' , $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.

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


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

Ich hab es jetzt so gelöst:


$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", "
"), '' , $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], ' 
\r' ), 0, 3);
            if ($prefix == 'var') {
                $var_name    = substr(trim($thing[0]), 4);
            }
            else 
            {
                $var_name = trim($thing[0]);
            }
    $array[$var_name] = $value;  
}   
var_dump($array); 

Vielleicht so?



$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