CKEditor haalt backslashes weg
Beste developers,
Aller eerst nog fijne dagen toegewenst.
Ik heb sinds kort CKEditor ingebouwd in de backend van mijn cursus systeem.
Deze CKEditor beschikt over de CodeSnippets plugin met GeSHi ondersteuning. Op zich werkt alles goed. Tot ik de opdracht verstuur (POST).
Als ik een code blok aanmaak met de volgende code:
en ik verstuur de pagina naar een losse PHP file en ik doe var_dump ( $_POST ), dan zijn mijn backslashes verdwenen.
Gebruik ik echter twee backslashes, dan zie ik er één in de var_dump.
Mijn CKEditor config ziet er als volgt uit:
<script type="text/javascript">
var config = {
extraPlugins: 'codesnippet',
allowedContent: true,
htmlEncodeOutput: false,
entities: false,
codeSnippetGeshi_url: '{$G:base-url}/assets/js/vendor/CKEditor/geshi_colorizer.php',
codeSnippet_theme: 'github',
height: 356
};
CKEDITOR.replace( '{$field-id}', config );
</script>
Iemand enig idee?
Bvd!
Aller eerst nog fijne dagen toegewenst.
Ik heb sinds kort CKEditor ingebouwd in de backend van mijn cursus systeem.
Deze CKEditor beschikt over de CodeSnippets plugin met GeSHi ondersteuning. Op zich werkt alles goed. Tot ik de opdracht verstuur (POST).
Als ik een code blok aanmaak met de volgende code:
en ik verstuur de pagina naar een losse PHP file en ik doe var_dump ( $_POST ), dan zijn mijn backslashes verdwenen.
Gebruik ik echter twee backslashes, dan zie ik er één in de var_dump.
Mijn CKEditor config ziet er als volgt uit:
<script type="text/javascript">
var config = {
extraPlugins: 'codesnippet',
allowedContent: true,
htmlEncodeOutput: false,
entities: false,
codeSnippetGeshi_url: '{$G:base-url}/assets/js/vendor/CKEditor/geshi_colorizer.php',
codeSnippet_theme: 'github',
height: 356
};
CKEDITOR.replace( '{$field-id}', config );
</script>
Iemand enig idee?
Bvd!
Gewijzigd op 26/12/2015 10:12:23 door Henk van Loo
Henk, de slashes worden uberhaupt nooit getoond in de HTML.
Dit is alleen om de dubbele quotes te escapen.
Doe dit eens.
Dit is alleen om de dubbele quotes te escapen.
Doe dit eens.
Code (php)
1
2
3
4
2
3
4
<?php
// Ik heb de dubbele quotes vervangen door enkele
echo '<span class="test">Tekst</span>';
?>
// Ik heb de dubbele quotes vervangen door enkele
echo '<span class="test">Tekst</span>';
?>
Gewijzigd op 28/12/2015 10:26:22 door Harmen Havekes
@Harmen, je mist een afsluitende enkele quote :).
Neemt niet weg dat de invoer aangepast wordt, wat niet zou mogen. Omdat de backslashes zijn verdwenen uit $_POST vermoed ik dat het strippen ervan al heeft plaatsgevonden voor het posten, PHP zal dit van zichzelf niet doen (bij oudere versies van PHP werden wel automatisch backslashes toegevoegd middels "magic quotes").
Dit zal dus ergens in je configuratie zitten of wellicht in je "cursus systeem"?
Heb je het bovenstaande gedrag ook echt geïsoleerd getest? Dan kun je dingen uitsluiten en gerichter naar de oorzaak zoeken.
Neemt niet weg dat de invoer aangepast wordt, wat niet zou mogen. Omdat de backslashes zijn verdwenen uit $_POST vermoed ik dat het strippen ervan al heeft plaatsgevonden voor het posten, PHP zal dit van zichzelf niet doen (bij oudere versies van PHP werden wel automatisch backslashes toegevoegd middels "magic quotes").
Dit zal dus ergens in je configuratie zitten of wellicht in je "cursus systeem"?
Heb je het bovenstaande gedrag ook echt geïsoleerd getest? Dan kun je dingen uitsluiten en gerichter naar de oorzaak zoeken.
Nu niet meer thomas
Ik had bovenaan de index de volgende code gezet:
Eigen scripting is dan verder nog niet uitgevoerd. Magic Quotes staan uit.
Javascript (jQuery) bleek nog het een en ander te doen met de postdata. Na wat gestoei met jQuery kreeg ik de goede POST output. In de database bleef het probleem echter.
Omdat ik MySQL queries met dubbele quotes maak, werden de backslashes dus "weggehaald".
Als oplossing hiervoor heb ik in mijn database class (welke gebruik maakt van PDO), een str_replace toegepast.
Bedankt voor de tips en de hulp!
Eigen scripting is dan verder nog niet uitgevoerd. Magic Quotes staan uit.
Javascript (jQuery) bleek nog het een en ander te doen met de postdata. Na wat gestoei met jQuery kreeg ik de goede POST output. In de database bleef het probleem echter.
Omdat ik MySQL queries met dubbele quotes maak, werden de backslashes dus "weggehaald".
Als oplossing hiervoor heb ik in mijn database class (welke gebruik maakt van PDO), een str_replace toegepast.
Bedankt voor de tips en de hulp!
Ben ik toch benieuwd hoe je je query dan opbouwt, want PDO (de prepared statement laag) zou hier van zichzelf goed mee om moeten gaan lijkt mij. Geef je je POST data echt door via assigns of een toekenning in de execute zelf? Of plak je deze in je querystring? Als je dit laatste doet dan doe je het verkeerd en omzeil je in feite alle functionaliteit + beveiliging die PDO je biedt.




