2017-01-26 3 views
-2

Ich habe ein großes multidimensionales Array, zu dem es mehrere String-Werte gibt, die Strings mit HTML-Tags und -Attributen enthalten.PHP | json_encode entfernt html-Tags

aber wenn ich json_encode benutze der Ausgang ich habe einige der Tags entfernt werden.

Hier ist das Beispiel Ich habe versucht, auf eine separate Datei, um sicher zu sein, wenn dies tatsächlich das Problem mit JSON Encode ist und stellt sich heraus, dass ich Recht hatte.

<?php 
$var = array(
    "type" => "<p style=\"text-align: center;\">sfds</p>" 
); 
    $encoded = json_encode($var); 


echo '<pre>'; 
print_r($encoded); 

Wie behandelt man diese Art von Situation?

Dies ist das Ergebnis, das ich von Beispiel bekommen habe.

{"type":" 
sfds<\/p>"} 

und das ist das Ergebnis, das ich von meinem mehrdimensionalen Array bekomme.

{"data":[{"type":"columns","data":{"columns":[{"width":6,"blocks":[]},{"width":6,"blocks":[]}],"preset":"columns-6-6"}},{"type":"columns","data":{"columns":[{"width":6,"blocks":[{"type":"heading","data":{"text":" 
I am the Heading<\/p>","mce_0":" 

I am the Heading<\/p>"}},{"type":"heading","data":{"text":" 

sfds<\/p>","mce_1":" 

sfds<\/p>"}}]},{"width":6,"blocks":[{"type":"text","data":{"text":" 

\n 
Im Text<\/div>\n<\/div>","mce_2":" 
\n 
Im Text<\/div>\n<\/div>"}}]}],"preset":"columns-6-6"}},{"type":"text","data":{"text":" 
\n 
Im just a text<\/div>\n<\/div>","mce_3":" 
\n 
Im just a text<\/div>\n<\/div>"}}]} 

= - = - = - = - = - = -

Update: generierte HTML-Quellcode der var_dump von Array-Variablen, die ich zu kodieren versuchen.

<pre> after set2_decode:<br>array(1) { 
    ["data"]=&gt; 
    array(3) { 
    [0]=&gt; 
    array(2) { 
     ["type"]=&gt; 
     string(7) "columns" 
     ["data"]=&gt; 
     array(2) { 
     ["columns"]=&gt; 
     array(2) { 
      [0]=&gt; 
      array(2) { 
      ["width"]=&gt; 
      int(6) 
      ["blocks"]=&gt; 
      array(0) { 
      } 
      } 
      [1]=&gt; 
      array(2) { 
      ["width"]=&gt; 
      int(6) 
      ["blocks"]=&gt; 
      array(0) { 
      } 
      } 
     } 
     ["preset"]=&gt; 
     string(11) "columns-6-6" 
     } 
    } 
    [1]=&gt; 
    array(2) { 
     ["type"]=&gt; 
     string(7) "columns" 
     ["data"]=&gt; 
     array(2) { 
     ["columns"]=&gt; 
     array(2) { 
      [0]=&gt; 
      array(2) { 
      ["width"]=&gt; 
      int(6) 
      ["blocks"]=&gt; 
      array(2) { 
       [0]=&gt; 
       array(2) { 
       ["type"]=&gt; 
       string(7) "heading" 
       ["data"]=&gt; 
       array(2) { 
        ["text"]=&gt; 
        string(23) "<p>I am the Heading</p>" 
        ["mce_0"]=&gt; 
        string(23) "<p>I am the Heading</p>" 
       } 
       } 
       [1]=&gt; 
       array(2) { 
       ["type"]=&gt; 
       string(7) "heading" 
       ["data"]=&gt; 
       array(2) { 
        ["text"]=&gt; 
        string(39) "<p style="text-align: center;">sfds</p>" 
        ["mce_1"]=&gt; 
        string(39) "<p style="text-align: center;">sfds</p>" 
       } 
       } 
      } 
      } 
      [1]=&gt; 
      array(2) { 
      ["width"]=&gt; 
      int(6) 
      ["blocks"]=&gt; 
      array(1) { 
       [0]=&gt; 
       array(2) { 
       ["type"]=&gt; 
       string(4) "text" 
       ["data"]=&gt; 
       array(2) { 
        ["text"]=&gt; 
        string(59) "<div> 
<div style="text-align: center;">Im Text</div> 
</div>" 
        ["mce_2"]=&gt; 
        string(59) "<div> 
<div style="text-align: center;">Im Text</div> 
</div>" 
       } 
       } 
      } 
      } 
     } 
     ["preset"]=&gt; 
     string(11) "columns-6-6" 
     } 
    } 
    [2]=&gt; 
    array(2) { 
     ["type"]=&gt; 
     string(4) "text" 
     ["data"]=&gt; 
     array(2) { 
     ["text"]=&gt; 
     string(65) "<div> 
<div style="text-align: right;">Im just a text</div> 
</div>" 
     ["mce_3"]=&gt; 
     string(65) "<div> 
<div style="text-align: right;">Im just a text</div> 
</div>" 
     } 
    } 
    } 
} 
</pre> 
+1

Anstatt in einem Browser zu sehen - öffnen Sie generierten HTML. Oder führen Sie das Skript in einer Konsole aus. –

+0

@u_mulder hat Ihren Punkt nicht bekommen. Was nutzt es, die Daten im Browser zu sehen, wenn das codierte Json-Dosent gut funktioniert? Ich brauche die JSON, aber diese JSON sollte die HTML-Tags auch mit Attributen enthalten. und ich habe am Browser versucht das Array funktioniert gut und HTML-Tags kann nicht direkt gesehen werden, wie es implementiert wird, wenn im Browser angezeigt wird. –

+0

Bitte https://3v4l.org/XWI43 –

Antwort

1

Ihr Browser blendet alle Tags aus. Verwendung htmlentities() zu sehen Alle Tags

print_r(htmlentities($encoded)); 
+0

htmlentities funktioniert für Zeichenfolge oder mehrdimensionale Arrays. also habe ich so versucht. 'ob_start(); \t \t \t \t \t \t print_r ($ set2_decode); \t \t \t \t \t \t $ buffer = ob_get_clean(); \t \t \t \t \t \t echo "

 after set2_decode = ".htmlentities($buffer)."
"; ' –

0

es ist nicht best practice HTML in JSON Antwort zu finden, die beste Praxis ist zu accually den HTML im Frontend zu erstellen und rufen Sie einfach die Daten in dem HTML-Code bereits gebaut. Beachten Sie jedoch, dass Sie in JSON-Antwort kein reines HTML haben können. Es ist in der Regel entkommen. Sie müssen also sicherstellen, dass Ihr HTML-Code korrekt erstellt wurde. Dies ist ein guter Artikel, um Ihnen dabei zu helfen.

https://www.thorntech.com/2012/07/4-things-you-must-do-when-putting-html-in-json/

1

Ich denke, htmlentities helfen. Bitte benutze print_r und entkomme dann dein HTML.

echo htmlentities (print_r (json_encode($var), true)); 

Ich hoffe, das hilft!