Mit php php ausgeben

crazy_chicken

Erfahrenes Mitglied
Hallo Zusammen,
seit einer Stunde versuche zu verstehen warum sowas nicht funktioniert:
PHP:
<?php
$text = "<?php\n\t\$a = \"123\";\n echo \"\$a\";\n?>";
echo $text;

?>

Kann mir jemand weiterhelfen?

Danke im Voraus!
Gruß
 
Was heisst geht nicht?
Wie sollte die Ausgabe aussehen und wie sieht sie aus?

Ich denke du bekommst (wenn du es als Source-Code anschaust).
Code:
<?php
	$a = "123";
 echo "$a";
?>

Wen ndu es als HTML Anschauen willst, solltest du alle Spezialzeichen mit htmlspecialchars() escapen
 
Ja es müsste genau das rauskommen, was du erwartest.
Wahrscheinlich versteckt dein Browser nur ("übriggeblienen") PHP-Code in der Anzeige.
 
Falls du deinen Skriptcode formatiert ausgeben willst, kannst du die PHP-Funktion highlight_string nutzen:
PHP:
highlight_string("<?php\n\t\$a = \"123\";\n echo \"\$a\";\n?>", false);
 
Genau, PHP code wird vom Browser nicht ausgegeben, also versteckt.
Wie kann ich folgendes realisieren:
In der Datenbank ist folgender Text: "bla bla bla [code ]public class {..etc...}[/code ]"
Ich will, dass der text nur zwischen [code ][/code ] mit der methode highlight_string() ausgegeben wird.

Mein Problem liegt daran, wie soll ich genau diesen Text zwischen code ermitteln. Aber auch nach dem ich es ermittelt habe, wie soll ich diesen text dann an der zugehörigen Position im Text mit highlight_string() ausgeben.

Gruß!

Danke euch allen für euere Bemühung!
 
Zuletzt bearbeitet:
Hast Du es denn schon mit htmlspecialchars() versucht?

PHP:
<?PHP
$string = '<?php\n\t\$a = \"123\";\n echo \"\$a\";\n?>';

echo htmlspecialchars ( $string, ENT_QUOTES );
?>
Wüsste nicht, warum dies nicht gehen sollte..

mfg chmee

(für reguläre Ausdrücke den in meiner Signatur verlinkten Regex-Tester anwerfen ;))
 
Zuletzt bearbeitet:
Reguläre Ausdrücke ist das was du suchst. Es gib schon zig Beispiele im Forum, darum mach ich mal kein neues.
 
Ich habe mir jetzt einfach mal den letzten Beitrag von chmee genommen und ihn im RegEx-Tester als Beispiel genommen. Dann sollte bei dir am Ende so etwas hier raus bekommen:
PHP:
<?php
$string = <<<SOURCE
Hast Du es denn schon mit htmlspecialchars() versucht?

PHP:
<?PHP 
$string = '<?php\n\t\$a = \"123\";\n echo \"\$a\";\n?>'; 

echo htmlspecialchars ( $string, ENT_QUOTES );
?>
Wüsste nicht, warum dies nicht gehen sollte..

mfg chmee

SOURCE;
PHP:
$regex = '/\[code\](.*)\[\/code\]|(\[)|([^\[]+)/isu';
$output = '';

if(preg_match_all($regex, $string, $match)) {
  foreach($match[0] as $i => $value) {
    if($match[1][$i] !== '') {
      $output .= highlight_string($match[1][$i], true);
    } else {
      $output .= $value;
    }
  }
}

echo $output;
Ich finde meine Variante aber noch nicht optimal, da hier noch die öffnenden eckigen Klammern gesondert behandelt werden müssen. Gibt es da nicht noch etwas schöneres?
 
Ich kann nur nicht verstehen:
1.Wie soll ich diesen quellcode oder mehrere sogar zwischen [code][/code] ermitteln?
2.Auch wenn ich es ermittelt habe, wie soll ich diesen Code dann mit highlight_string() an die richtige position im ausgegebenen Text einfügen.Oder gibt es sowas^^:
PHP:
$text="ich habe ein Problem mit diesem: [code ]bla bla bla[/code ] und das hat mir auch nicht geholfen [code ]bla bla bla[/code ] "

echo= ignor_textzwischen_code(highlight_string(get_code_zwischen_codestr));

Danke noch mal an Alle!
 
//anstelle von $a brauche ich eine Funktion, die den text zwischen genau diesem [ php][ /php] string ermittelt
PHP:
$str2= preg_replace("/\[PHP\](.*)\[\/PHP]/", highlight_string("<?php\n ".$a." \n ?>"), $str);

Jemand eine idee?

Gruß!
 
Zuletzt bearbeitet:
Zurück