php uit een string parsen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Peter Somhorst

Peter Somhorst

18/04/2007 20:58:00
Quote Anchor link
Ik heb een script waarin ik een stukje HTML met PHP-code erin uit een bestand laad. Nee, dit bestand is geen PHP-bestand, en heeft dus ook geen
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php /* CODE */ ?>
tags.

Bijv:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Hey ik ben {$naam} en ik woon in {$plaats}.

Ik lees dat bestand uit m.b.v.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $content = fread(fopen($file,'r'),filesize($file)); ?>

Als ik $content echo krijg ik:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Hey ik ben {$naam} en ik woon in {$plaats}.

Het moet echter worden:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Hey ik ben Peter en ik woon in Oude Pekela.

Hoe moet ik de variabele $content laten parsen door PHP zodat hij de variabelen $naam en $plaats 'invuld'?
Gewijzigd op 01/01/1970 01:00:00 door Peter Somhorst
 
PHP hulp

PHP hulp

04/05/2024 05:46:42
 
Baarr

Baarr

18/04/2007 21:01:00
Quote Anchor link
Opmerking, je bent fout bezig !

Optie: eval()
 
Peter Somhorst

Peter Somhorst

18/04/2007 21:03:00
Quote Anchor link
@Baarr: why? omdat ik PHP uit een file parse? Niet geheel veilig uiteraard, maar daarnaast zie ik weinig bezwaren... vooral in mijn geval...

Maar iig bedankt!
 
Baarr

Baarr

18/04/2007 21:24:00
Quote Anchor link
eval == evil


Anyway, ik zou het zo doen (ervan uitgaande dat ik niet onder deze situatie uit kan)

Gebruik str_replace om de waardes te vullen

Dus $return = str_replace('{$naam}', $naam, $tekst);

Let op dat er single quotes om de eerste $naam staan.

Dit kun je eventueel ook nog in een loopje zetten.

Als ik wel onder deze situatie uit kan zou ik heel mijn systeem anders opzetten zodat ik dit niet hoef te doen, maar dat even terzijde.
 
Joren de Wit

Joren de Wit

18/04/2007 21:38:00
Quote Anchor link
@Baarr: eval() is hier geen optie. De parameter die je meegeeft aan deze functie mag alleen maar uit php code bestaan. In bovenstaand geval zal php dus gewoon een parse error geven...

De enige oplossing is dus de tweede oplossing die je aandraagt. Evt. zou je het nog met een preg_replace kunnen doen om de variabelenaam te herkennen...

ps. Probeer dit bijvoorbeeld maar eens uit te voeren, je zult zien dat het niet werkt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$naam
= 'Kees';
$plaats = 'Amsterdam';

eval('Hey ik ben {$naam} en ik woon in {$plaats}.');
?>
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
Baarr

Baarr

18/04/2007 21:49:00
Quote Anchor link
Wel de echo functie meegeven in dit geval.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$naam
= 'Kees';
$plaats = 'Amsterdam';

eval('echo "Hey ik ben {$naam} en ik woon in {$plaats}.";');
?>
 
Peter Somhorst

Peter Somhorst

18/04/2007 21:49:00
Quote Anchor link
@Baarr: Ik zou het ook graag anders doen, maar dan wordt het een onoverzichtelijke klerenbende... Ik ben namelijk bezig met een vrij uitgebreidt script met veel MySQL-query's. Die sla ik het liefst overzichtelijk op, wat per query zo'n 10-35 regels kost. Als je 20*dit aantal regels in 1 file moet zetten krijg je twee problemen: ten eerste moet je telkens die hele file doorlopen, en ten tweede wordt je file ellendig lang. Daarom heb ik er voor gekozen de langere queries op te slaan in aparte files, en die via eval() binnen te halen.

@Blanche: op www.php.net staat een uitleg hoe dit wél kan werken met eval():

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$string
= 'cup';
$name = 'coffee';
$str = 'This is a $string with my $name in it.';
echo $str. "\n";
eval("\$str = \"$str\";");
echo $str. "\n";
?>
 
Baarr

Baarr

18/04/2007 21:50:00
Quote Anchor link
Lees mijn bovenstaande post van 21:49
Gewijzigd op 01/01/1970 01:00:00 door Baarr
 
Peter Somhorst

Peter Somhorst

18/04/2007 21:55:00
Quote Anchor link
Baarr schreef op 18.04.2007 21:50:
Lees mijn bovenstaande post van 21:49


Als je 'em meteen wil echo'en is dit de beste optie, maar zo niet...
 
Baarr

Baarr

18/04/2007 21:59:00
Quote Anchor link
Zo dan:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$naam
= 'Kees';
$plaats = 'Amsterdam';

eval('$blaat = "Hey ik ben {$naam} en ik woon in {$plaats}.";');

// hier de rest van je code

echo $blaat;

?>
 
Peter Somhorst

Peter Somhorst

18/04/2007 22:07:00
Quote Anchor link
dat is zeg maar ongeveer exact hetzelfde als wat ik zei, op een paar escaped quotes na... weinig toevoegend dus...
 
Baarr

Baarr

18/04/2007 22:09:00
Quote Anchor link
Zeg dan eens wat je precies wilt.. ik volg je niet meer ....
 
Peter Somhorst

Peter Somhorst

19/04/2007 00:06:00
Quote Anchor link
Wat ik wil heb ik al, en dat staat in mijn post van 21:49. Uw post van 21:59 bevat een stukje code dat exact hetzelfde doet, maar net een andere syntax heeft.
 
Baarr

Baarr

19/04/2007 00:08:00
Quote Anchor link
Ik dacht dat je er nog niet aan uit was, maar mooi zo, weer een tevreden peehaapee-ur.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.