Hallo Leden,

Ik zit in een CMS, vervolgens schakel ik over naar de optie embeded HTML.

Dan plak ik de volgende code erin:

<pre><code><?php echo 'Welkom!'; ?></code></pre>

Na het opslaan blijf ik alleen nog met

<pre> </pre> over.

Iemand hier een handig trucje voor?

<?php echo 'Welkom!'; ?>

Dit is geen HTML maar PHP, en blijkbaar wordt dit uit veiligheidsoverwegingen netjes weggestript.
Als je er HTML van wilt maken, dan zul je de < en > moeten vervangen door onschadelijke entities:

Dus dan krijg je dit:

&lt;?php echo 'Welkom!'; ?&gt;

Uiteraard wordt het PHP-scriptje ook niet uitgevoerd, maar dat zal de bedoeling ook niet zijn, zoals ik lees.
In welk CMS werk je?
Wat voor editor gebruik je?
Wat probeer je uiteindelijk te bereiken? Het weergeven van code in een soort van codeblokken (zoals op dit forum gebeurt als je [code]...[/code] gebruikt?) Misschien bestaan er plugins voor deze editor die dit doen?

En ja, PHP in HTML gaat niet werken, en wellicht stript de editor passages die als "gevaarlijk" worden bestempeld.

Wat Ariën voorstelt kan wellicht werken, maar ik zou deze werkwijze niet hanteren, omdat dit toch een soort van escape-on-input is, wat gewoon niet praktisch werkt.

Idealiter wil je zoiets dat:
[code]<?php
echo 'Hello World.';
?>[/code]

Wordt omgezet naar:
<?php
echo 'Hello World.';
?>

?
Ik wil het zoals hier op Phphulp weergeven.

Dus de <pre> met de <code> (waardoor de tekst kleur krijgt).

De Pre en de Phpcode worden weergegeven, alleen <code> verwijderd bij het opslaan.
Mja, dan zul je een soort van UBB-code functionaliteit moeten inbouwen. Die je editor -wat deze ook moge wezen- ook accepteert (en niet stript). Deze UBB-code leest dan passages met [tagcode]...[/tagcode] uit en vervangt deze door iets anders. Of je zoekt een of ander fancy WYSIWYG-equivalent.
Thomas van den Heuvel op 10/03/2016 15:22:22

Wat Ariën voorstelt kan wellicht werken, maar ik zou deze werkwijze niet hanteren, omdat dit toch een soort van escape-on-input is, wat gewoon praktisch werkt.

Leg eens uit? Als ik zo zie, wil hij een hele PHP-code gewoon behanbdelen als een string. Dan moet je gewoon de < en > onschadelijk maken door ze te vervangen in HTML-entities.
Er miste een "niet" :).

Stel dat je die code dadelijk nog een keer wilt aanpassen.

Dat leest voor geen meter.

Je moet input niet escapen maar zoveel mogelijk proberen in zijn rauwe vorm op te slaan. Zodat bewerken geen hels karwei wordt.

Vervolgens is het de bedoeling dat je output onschadelijk maakt. Daar pas je eventuele escaping toe.

EDIT: daarbij zit je nog met het volgende dilemma: als je iets gaat weergeven. Weet je dan ZEKER dat iets al ge-escaped is? Ik denk dat het veiliger is om aan te nemen dat iets nog NIET ge-escaped is dan er vanuit te gaan dat iets WEL ge-escaped is. Dit lijkt mij nog een reden om het escapen pas in een zo laat mogelijk stadium te doen (en er hierbij vanuit te gaan dat dit dus nog niet is gebeurd). Better safe than sorry.
Het gaat om het blog: Nibbleblog.
Ik kan zo helaas niet zien welke editor er wordt gebruikt. (lijkt erop dat het 'tiny editor' is.

Wel wordt alle code in een string gezet. De editor werkt wel met de volgende code:

 <code class="rainbow" data-language="php"><span class="variable language php-tag">&lt;?php</span> 


Moet je niet gewoon dit in de embedded HTML zetten:

<pre>Welkom!</pre>
op het forum van nibble staat iets over een Google Code Prettify plugin.

2 minuten googlen :/.

EDIT: mogelijk werkt bovenstaande niet meer, maar er zijn dus mogelijkheden. Of je schrijft je eigen plugin. Of je Googled even verder.
Met htmlentities kan je de string zelf omvormen tot een string met onschadelijke entities.
Een mooi hulptooltje vind je hier: https://www.functions-online.com/htmlentities.html

Let er wel op dat deze standaard UTF-8 gebruikt.

Jan de Laet op 10/03/2016 15:41:16

Moet je niet gewoon dit in de embedded HTML zetten:

<pre>Welkom!</pre>


Ik denk dat hij de PHP-code wilt tonen, uiteraard ongeparsed ;-).

Reageren