trunx: array liegt als string vor, wie diesen in ein array umwandeln?

hallo,

ich habe (wie im betreff bereits geschrieben) einen mehrdimensionalen, stark verschachtelten array als string vorliegen, zb.:

$array_str = "[[a,b],'c',[[1,2,3,null],null],d]";

bis jz helfe ich mir damit, diesen wie folgt

$array_php_text = "<?php  
/$array = ".$array_str.";  
?>";  

in eine *.php datei zu schreiben. ich includiere diese dann und erhalte den array komplett in seiner struktur.

soweit so schlecht. ich hätte gern den array ohne den umweg über die externe datei, habe aber bisher nichts gefunden und meine versuche mit explode() bzgl. ',' und den eckigen klammern selbst eine routine zu schreiben, sind bis jz auch aufgrund der verschachtelungstiefe (bis jz so zwischen 10 und 15) erfolglos. gibt es einen einfachen und effektiven weg dazu?

wär toll, wenn wer was weiss
trunx

--
Die Standard-Antwort: "Bitte benutze die Forum-Suche!" macht die Forum-Suche kaputt, weil die Suche dann nämlich genau vor allem diese dämliche Standard-Antwort, also Müll liefert. Sinnvoller ist stattdessen folgende Standard-Antwort: "Dieses Thema wurde schon vielfach im Forum besprochen, siehe z.B. <a>hier</a> oder <a>da</a> oder benutze die Forum-Suche z.B. mit den Stichworten 'Stichwort1 Stichwort2'." Danke.

akzeptierte Antworten

  1. Tach!

    soweit so schlecht.

    Stimmt. Warum liegen die Daten denn überhaupt so vor? Kann man die nicht gleich brauchbar/anders erstellen?

    ich hätte gern den array ohne den umweg über die externe datei, [...] gibt es einen einfachen und effektiven weg dazu?

    eval() evaluiert einen String als Code ohne weitere Umwege.

    dedlfix.

    1. Tach!

      eval() evaluiert einen String als Code ohne weitere Umwege.

      Eingeschleusten Code auch. Nicht empfehlenswert!

      Setze einen (JSON) Parser ein, fertig.

      Dag

      1. Tach!

        eval() evaluiert einen String als Code ohne weitere Umwege.

        Eingeschleusten Code auch. Nicht empfehlenswert!

        Warum nur wusste ich, dass diese pauschale Aussage kommen würde? eval() ist nicht unsicherer als die derzeitige Lösung. Ob etwas eingeschleust werden kann, war aus der Fragestellung nicht zu entnehmen und auch ein Grund meiner Rückfrage.

        Setze einen (JSON) Parser ein, fertig.

        Ich fragte nicht umsonst, woher die Daten kommen. Um eine Empfehlung auszusprechen, muss ich erstmal wissen, ob diese realistischerweise umsetzbar ist.

        dedlfix.

        1. hallo,

          vielen dank für die antworten. das ist ein daten-array von google.maps und daher ein einschleusen von fremdcode prinzipiell natürlich möglich. wie dedlfix richtig bemerkt, wäre das auch bisher ein problem, das ich aber bereits (hoffentlich, wenn nicht, gern noch den einen oder anderen tipp) gelöst habe, indem ich nur strings zulasse, die kein semikolon enthalten. das beschränkt die anzahl der möglichen befehle, die umfangreichen code enthalten können ein, daher hatte ich noch strings ausgeschlossen, die 'include' bzw. 'require' enthalten. jz sollte der string wohl auch auf 'eval' geprüft werden.

          ansonsten ist eval() eine ganz gute lösung(, das ich auch schon mal benutzt hatte, aber nur zum rechnen o.o).

          trunx

          --
          Die Standard-Antwort: "Bitte benutze die Forum-Suche!" macht die Forum-Suche kaputt, weil die Suche dann nämlich genau vor allem diese dämliche Standard-Antwort, also Müll liefert. Sinnvoller ist stattdessen folgende Standard-Antwort: "Dieses Thema wurde schon vielfach im Forum besprochen, siehe z.B. <a>hier</a> oder <a>da</a> oder benutze die Forum-Suche z.B. mit den Stichworten 'Stichwort1 Stichwort2'." Danke.
          1. Tach!

            das ist ein daten-array von google.maps und daher ein einschleusen von fremdcode prinzipiell natürlich möglich. wie dedlfix richtig bemerkt, wäre das auch bisher ein problem, das ich aber bereits (hoffentlich, wenn nicht, gern noch den einen oder anderen tipp) gelöst habe, indem ich nur strings zulasse, die kein semikolon enthalten.

            Du weißt aber schon, dass das Semikolon in Javascript optional ist und auch ein Zeilenumbruch in vielen Fällen ausreicht?

            das beschränkt die anzahl der möglichen befehle, die umfangreichen code enthalten können ein, daher hatte ich noch strings ausgeschlossen, die 'include' bzw. 'require' enthalten. jz sollte der string wohl auch auf 'eval' geprüft werden.

            Wenn du schon in eval() drin bist, musst du nicht mehr eval() ausführen. Da kannst du auch gleich fopen() und was weiß ich nehmen, um Unheil anzustiften.

            ansonsten ist eval() eine ganz gute lösung(, das ich auch schon mal benutzt hatte, aber nur zum rechnen o.o).

            Es ist nur einfacher als die include-Lösung. Besser ist sie nicht. Sind die Daten vielleicht JSON-kompatibel aufgebaut?

            dedlfix.

            1. hmm,

              Es ist nur einfacher als die include-Lösung. Besser ist sie nicht. Sind die Daten vielleicht JSON-kompatibel aufgebaut?

              ja, hab grad json_decode() ausprobiert und funktioniert. gibt es da sicherheitsbedenken?

              --
              Die Standard-Antwort: "Bitte benutze die Forum-Suche!" macht die Forum-Suche kaputt, weil die Suche dann nämlich genau vor allem diese dämliche Standard-Antwort, also Müll liefert. Sinnvoller ist stattdessen folgende Standard-Antwort: "Dieses Thema wurde schon vielfach im Forum besprochen, siehe z.B. <a>hier</a> oder <a>da</a> oder benutze die Forum-Suche z.B. mit den Stichworten 'Stichwort1 Stichwort2'." Danke.
              1. Moin!

                Es ist nur einfacher als die include-Lösung. Besser ist sie nicht. Sind die Daten vielleicht JSON-kompatibel aufgebaut?

                Der Kram aus der Google-sonstwas-API ist regelmäßig im JSON-Format.

                ja, hab grad json_decode() ausprobiert und funktioniert. gibt es da sicherheitsbedenken?

                Nun ja. Die gibt es eigentlich immer wenn man fremden Daten vertraut. Gegenwärtig sind mir allerdings keine besonderen Sicherheitsbedenken hinsichtlich der Google-Maps-API und auch nicht hinsichtlich json_decode() bekannt. Letzteres ist hier hier die "Methode der Wahl".

                Jörg Reinholz

              2. Tach!

                ja, hab grad json_decode() ausprobiert und funktioniert. gibt es da sicherheitsbedenken?

                Das Problem kommt ja dadurch zustande, wenn Daten in Code eingefügt werden sollen und man einem Code-Parser vorgaukeln kann, dass die Daten vorzeitig zu Ende sind und danach Code folgt. Ein Parser, der lediglich Daten liest und sie in einer anderen Form bereitstellt, hat diese Probleme nicht. (Er kann jedoch Programmierfehler enthalten, die man mit einer bestimmten Datenanordnung ausnutzen kann. Aber dagegen kannst du ans Anwender nichts weiter tun, als regelmäßig Fehlerkorrekturen des Anbieters zu installieren und zu hoffen.) json_decode() kann also als sicher betrachtet werden, oder vielleicht besser gesagt als vertrauenswürdig, bis Probleme bekannt werden. Erst wenn du die Daten in anderen Code einfügen möchtest, hast du wieder ein potentielles Problem, wenn du den Kontextwechsel nicht ausreichend berücksichtigst.

                dedlfix.

              3. wieder was gelernt...