Avatar billede tangveje Nybegynder
06. januar 2003 - 20:58 Der er 13 kommentarer og
1 løsning

Parse PHP kode i streng

Hej, jeg har denne kode som ikke virker, hvilket ikke undrer mig så forfærdeligt meget.

$html = preg_replace( "/\[php\](.*?)\[\/php\]/i", eval( "\\1" ), $html) ;

Jeg håber i kan se hvad det er jeg gerne vil opnå. $html kan indeholde en mængde PHP kode, omkranset af [php] og [/php], jeg vil gerne have at denne PHP kode parses og erstattes af resultatet. Hvis $html f.eks. indeholder denne kode

"Hello [php]echo "world" ;[/php]"

Skulle resultatet blive

"Hello world"

Da jeg ikke på forhånd ved hvor meget eller hvad PHP kode der måtte være gemt i $html, eller om der overhovedet er noget, er det jo lidt svært.

Og i behøver ikke nævne noget om sikkerhed her, det har jeg taget højde for, da det kun er mig der vil kunne ændre indholdet af $html

Følgende er de fejl jeg får med ovenstående kode, skulle det være til nogen hjælp

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /var/www/html/index.php(60) : eval()'d code on line 1

Parse error: parse error, unexpected $ in /var/www/html/index.php(60) : eval()'d code on line 1
Avatar billede jakoba Nybegynder
06. januar 2003 - 21:07 #1
meget usikker her, men prøv:
$html = preg_replace_callback( "/\[php\](.*?)\[\/php\]/i", "eval", $html);
Avatar billede supernewbie Nybegynder
06. januar 2003 - 21:07 #2
Tror ikke du kan lave den der sætning....
Der er ulovlige tegn i ..
Tror ikke det er muligt.. Ellers forstår jeg ikke dit spg.
Avatar billede tangveje Nybegynder
06. januar 2003 - 21:10 #3
Jakoba > Giver denne fejl

Warning: preg_replace_callback() requires argument 2, 'eval', to be a valid callback in /var/www/html/index.php on line 60

supernewbie > Muligvis, men andre løsninger er også velkomne :)
Avatar billede tangveje Nybegynder
06. januar 2003 - 21:34 #4
OK, er kommet lidt tætter på med det her

function evalit($matches) {
    return eval( $matches[1] ) ;
}

$html = preg_replace_callback( "/\[php\](.*?)\[\/php\]/i", "evalit", $html);

Desværre indsætter den det i starten af $html i stedet for hvor det oprindeligt stod
Avatar billede erikjacobsen Ekspert
06. januar 2003 - 21:40 #5
$s = "her er [php] print 'hejsa'; [/php] asda";
  $html = preg_replace('/\[php\](.*?)\[\/php\]/ie',"eval('\\1')", $s);
  print $html."\n";

det virker, men print-sætningen bliver udført først. Prøv selv.
Avatar billede tangveje Nybegynder
06. januar 2003 - 21:47 #6
erikjacobsen > Virker ikke helt her hos mig

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /var/www/html/index.php(61) : regexp code(1) : eval()'d code on line 1

Parse error: parse error, unexpected $ in /var/www/html/index.php(61) : regexp code(1) : eval()'d code on line 1

Koden er så nu

$s = $html ;
$html = preg_replace('/\[php\](.*?)\[\/php\]/ie',"eval('\\1')", $s);
Avatar billede erikjacobsen Ekspert
06. januar 2003 - 22:05 #7
Hvad står der i din $html ? Mon ikke syntaksfejlen er der?
Avatar billede tangveje Nybegynder
06. januar 2003 - 22:09 #8
Dette er indholdet at $html

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="da">

<head>
    <title>Casper Tang Veje</title>
   
    <meta name="Title" content="Casper Tang Veje" />
    <meta name="Description" content="Min lille private side, med en masse ævl" />
    <meta name="Keywords" content="casper, tang, veje" />
    <meta name="Robots" content="ALL" />

    <link rel="stylesheet" type="text/css" href="/style/main.css" media="screen" />
    <link rel="stylesheet" type="text/css" href="/style/main.css" media="print" />
</head>

<body>
    <div id="top"><img src="/images/logo.gif" alt="Casper Tang Veje" /></div>

    <div id="topbar">&nbsp;</div>

    <div id="menu">lib/menu.php</div>

    <div id="content">[php]echo "Hello World" ;[/php]</div>
</body>

</html>
Avatar billede erikjacobsen Ekspert
06. januar 2003 - 23:27 #9
<div id="content">[php]echo 'Hello World' ;[/php]</div>

ja, nu bliver det jo kompliceret... men ovenstående vil virke
Avatar billede Slettet bruger
06. januar 2003 - 23:32 #10
tangveje: Hvad er idéen i at gøre det, du prøver på? Jeg er bare nysgerrig. Det virker som dobbeltkonfekt.
Avatar billede tangveje Nybegynder
07. januar 2003 - 00:06 #11
erikjacobsen > Vil det sige at det kun virker såfremt $html kun indeholder en linie? Wow, så tror jeg at jeg opgiver, og finder på noget andet :)

mercur8> Ideen er lidt kryptisk, jeg er stadig ikke helt sikker på jeg selv har et helt klart billede at det færdige resultat (men det har jeg så at sige aldrig :)

Det jeg arbejder på er et lille CMS system med en bruger, mig selv :) For at gøre det så nemt og overskueligt som muligt, vil jeg have mulighed for at indsætte PHP kode rundt omkring på siden, uden at skulle til at ændre filer, og/eller uploade nye.

Muligvis ville du bedre forstå det hele hvis du sad med hele koden... Muligvis er jeg helt galt på den og tror det jeg sidder og laver er skide smart. Hvis det sidste er sandt finder jeg før eller siden ud af det, og er en erfaring rigere, muligvis fører det endda til en bedre løsning, og i så fald er jeg så meget klogere :o)
Avatar billede tangveje Nybegynder
07. januar 2003 - 00:16 #12
Erik > OK, den skulle lige op og vende en gang til :) Nu "virker" det, bortset fra det med at den ikke erstatter det, men bare placerer det i starten... Det jo ikke helt som jeg havde håbet
Avatar billede tangveje Nybegynder
07. januar 2003 - 00:20 #13
Og et kig på www.php.net/eval resulterede i svaret...

Skal bruge return frem for echo... Kan gå hen og blive problematisk, men er så nok den eneste løsning :(

Takker for hjælpen, det bliver nok ikke bedre :)
Avatar billede Slettet bruger
07. januar 2003 - 00:23 #14
Ja det vigtigste er at lære noget nyt. Helt enig.

[ shoot for the moon - if you miss, you'll land among the stars ]
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester