Embedded HTML pakt <code> niet
Ik zit in een CMS, vervolgens schakel ik over naar de optie embeded HTML.
Dan plak ik de volgende code erin:
<pre><code></code></pre>
Na het opslaan blijf ik alleen nog met
<pre> </pre> over.
Iemand hier een handig trucje voor?
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:
Uiteraard wordt het PHP-scriptje ook niet uitgevoerd, maar dat zal de bedoeling ook niet zijn, zoals ik lees.
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:
?
Gewijzigd op 10/03/2016 15:28:29 door Thomas van den Heuvel
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.
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.
Gewijzigd op 10/03/2016 15:36:49 door Thomas van den Heuvel
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 (php)
1
<code class="rainbow" data-language="php"><span class="variable language php-tag"><?php</span>
Gewijzigd op 10/03/2016 15:38:38 door Jan Graneker
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.
op het 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.
Gewijzigd op 10/03/2016 15:42:52 door Thomas van den Heuvel
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:
Ik denk dat hij de PHP-code wilt tonen, uiteraard ongeparsed ;-).
Gewijzigd op 10/03/2016 15:44:26 door - Ariën -
Thomas van den Heuvel op 10/03/2016 15:41:23:
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.
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.
Tnx, ik had deze inderdaad ook gevonden. Helaas niet meer volledig.
Toevoeging op 10/03/2016 15:47:45:
- Ariën - op 10/03/2016 15:43:18:
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.
Ik denk dat hij de PHP-code wilt tonen, uiteraard ongeparsed ;-).
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:
Ik denk dat hij de PHP-code wilt tonen, uiteraard ongeparsed ;-).
Ik wil inderdaad ongeparsed de PHP tonen. Het PRE blokje is wel te zien met inhoud en het lijkt erop dat de editor het automatisch unparsed, omdat de code gewoon getoond word?
Bedankt voor je link ik ga even kijken of ik daar wat mee kan.
Maar htmlspecialchars() pas je dus toe op datgene wat je weer gaat geven (escape on ouptut), niet op het moment dat deze informatie de database ingaat (escape on input).
Lees mijn edit van mijn eerste reactie op jouw vraag. Het is veiliger om er vanuit te gaan dat informatie nog niet ge-escaped is dan dit wel te doen. En het is onpraktisch om door die < > zut heen te spitten, te meer als je die veelvuldig gebruikt in je code snippet(s). Dan heb je toch veel liever dat die fatsoenlijk te lezen is?
Een plugin of extern stuk functionaliteit zou deze content moeten "knippen en plakken" in de gewenste vorm, daar zou je zelf verder geen moeite voor hoeven te doen.
Gewijzigd op 10/03/2016 15:51:13 door Thomas van den Heuvel
Precies. Ik wil graag gewoon de code kunnen typen, want als het bij het wijzigen omgezet word en alle XML getoond wordt is het een wirwar.
Ik zou dus even moeten kijken of ik de TinyCME editor zo kan met bijv. een plugin om dit goed weer te geven.
hier beschreven staat.
Je zou het kunnen proberen met GeSHi zoals Dit is de demopage:
http://demo.nibbleblog.com/
Als je naar onderscrollt zie je dat ze het daar ook ungeparsed laten zien, klopt dat?
Mogelijk worden codeblokken al out-of-the-box ondersteund.
Probeer voor je codeblokken gewoon eens het "preformatted" format, bekijk in de backend van de demo hoe ze dat daar doen.
De documentatie is niet erg duidelijk over het gebruik :/.