Beste mensen,

Ik heb een probleempje, misschien weten jullie een oplossing.

Met een hulpmiddel pas is de html code van een stuk tekst aan. Ik gebruik hiervoor de tool simple_html_dom

De bijgewerkte html code roep ik vervolgens met "echo $html" op. Echter, in de html code staat ook een stuk php. Maar die php code wordt nu niet geëvalueerd. Eigenlijk logisch. Maar hoe zou ik het dan wel kunnen doen? Kan ik de php code die in een variabele staat evalueren?

Hier is het stuk code waar het om gaat:

<?php
include $sMyScripts.'simple_html_dom.php'; 
//http://simplehtmldom.sourceforge.net/manual.htm#section_quickstart
$html = file_get_html('content'.$sPad.$sBestand);
if($html->find('div[id=inhoudlinks]'))
{
	$index='
				<ul>';
	foreach($html->find('h2') as $e)
	{
		$eInnerTxt= str_replace(" ","_",trim($e->innertext));
		$index.='
					<li><a href="#'.$eInnerTxt.'">'.$e->innertext.'</a></li>';

		$e->outertext='
			<div class="linktop2">
				<a href="#top"  >^top</a>
			</div>
			<a id="'.$eInnerTxt.'"></a>
			'.$e->outertext.'
';
	}
	$index.='
				</ul>
			';
	foreach($html->find('div[id=inhoudlinks]') as $element) 
	{
		$element->innertext=$index;
		$element->outertext='
			'.$element->outertext.'
';
	}

	echo $html;
}
?>
Het kan, met de hulp van eval(), maar dat is iets dat erg sterk wordt afgeraden.
Beste Ben,

Waarom wordt het afgeraden en wat zou een andere mogelijkheid kunnen zijn? Daarnaast ... ik denk niet dat het gaat werken want:

The code must not be wrapped in opening and closing PHP tags, i.e. 'echo "Hi!";' must be passed instead of '[?php echo "Hi!"; ?]'. It is still possible to leave and re-enter PHP mode though using the appropriate PHP tags, e.g. 'echo "In PHP mode!"; ?] In HTML mode! [?php echo "Back in PHP mode!";'.


Mijn php code is onderdeel in een stuk html code en staat daarin tussen
<?php ?>
eval() is extreem gevaarlijk, omdat je willekeurige php code kan uitvoeren, ook code die niet door jou is geschreven. Aangeraden is gewoon geen PHP code gebruiken in je aangepaste tekst te gebruiken, maar gewoon alles zo te structureren dat dat niet nodig is.
maar als ik nu goed lees, dan zou ik mijn laatste deel van mijn script
<?php
echo $html;
?>

moeten veranderen in:

<?php
	eval('?>'.$html.'<?php;');
?>

Maar komt dan de html code wel op het scherm?


Niet dus, ik krijg allerlei nieuwe foutmeldingen ...
Leg eens uit in het Nederlands wat je aan het maken bent? Want misschien is er een andere/betere oplossing voor jouw situatie.
Hoi Frank,

Leuk dat je aan schuift.

Ik denk dat ik het in mijn eerste bijdrage duidelijk had beschreven. Maar ik zal het proberen te verduidelijken.

Ik heb een soort framewerk van mijn website. Daarbij haal ik de variabele tekst/inhoud uit een seperaat bestandje. Omdat ik automatisch op basis van de gegevens in dat bestandje (de <h2> tags) een inhoudsopgave wil laten zien gebruik ik daarvoor een programmaatje simple_html_dom. Het resultaat van de bewerking wordt met echo $html op het scherm getoverd. Maar in de file die ik automatisch laat bewerken met simple_html_dom staat ook php code en die gaat nu niet mee.

Tja, wellicht in het verleden een verkeerde keuze gemaakt, maar ben op zoek naar de eenvoudigste oplossing om het weer recht te krijgen ;-) .
Prima maar wie maakt dat bestandje? Het gaat er namelijk om of de PHP code in dat bestand gegarandeerd veilig is. Als de hele wereld dat bestand kan aanmaken of wijzigen dan kun je wachten op een hack.
Dat bestandje maak ik zelf aan, dus dan ben ik zelf de hacker ;-)

Dus buiten mijn eigen tekortkomingen als programmeur is het verder helemaal veilig.
En dus is de vraag ook: kun je niet gewoon een betere manier verzinnen? Waarom zou je PHP code injecteren?
zou je dan niet in $html moeten gaan zoeken naar alle blokken die beginnen met <¿php en eindigen met ¿>

Die stukken van je op in zeg $a[x] en dan vervang je (str_replace) die gevonden blokken met eval($a[x])




Toevoeging op 06/02/2016 22:02:17:

https://en.wikiquote.org/wiki/Talk:Rasmus_Lerdorf


If eval() is the answer, you're almost certainly asking the wrong question.

Reageren