naeco Buddy Rich Big Band | Bonjour,
Je désire enregistrer le contenu d'un textarea géré en jquery avec CKeditor en ajax dans un script PHP de l'autre coté.
Le code coté jquery est le suivant : (ce qui est commenté est des essais infructueux)
Code :
- //var articleSansCaractereInterdit = $('#redaction').serialize();
- //var articleSansCaractereInterdit = encodeURIComponent($('#redaction').serialize());
- //var articleSansCaractereInterdit = encodeURIComponent($('#redaction').val());
- //var articleSansCaractereInterdit = $('#redaction').val().replace('"', "%22" );
- var articleSansCaractereInterdit = $('#redaction').val().replace('\n', " " );
- //var articleSansCaractereInterdit = articleSansCaractereInterdit.serialize();
- //TODOWROU on peut se passer du #redaction ? CKEDITOR.instances[instance].updateElement(); ??
- // http://stackoverflow.com/questions [...] m-ckeditor
- var jsonValue = '{';
- jsonValue = jsonValue + '"idVersionEdition" : "<?php echo $idVersionEdition; ?>",';
- jsonValue = jsonValue + '"idArticle" : "<?php echo $idArticle; ?>",';
- jsonValue = jsonValue + '"article" : "' + articleSansCaractereInterdit + '",';
- jsonValue = jsonValue + '"cssjs" : "' + $('#css_js_article').serialize() + '"';
- jsonValue = jsonValue + '}';
- //jsonValue = jsonValueArray.serializeArray();
- $.ajax({
- dataType: "json",
- type: "POST",
- async: false,
- cache: false,
- url: "article_save_auto.ajax.php",
- data: "jsonValue=" + jsonValue,
- success: function(){
- //writeInConsole( "Data Saved: " + dateSauvegarde );
- }
- });
|
Coté php, c'est ce code : (ce qui est commenté sont des essais infructueux)
Code :
- $jsonValue = $_POST['jsonValue'];
- if(get_magic_quotes_gpc()) {
- $jsonValue = stripslashes($_POST['jsonValue']);
- }
- //$jsonValue = $jsonValue.replace(/\n/g, "\\\\n" ).replace(/\r/g, "\\\\r" ).replace(/\t/g, "\\\\t" );
- //$jsonValue = str_replace(chr(10), "\n", $jsonValue);
- //$jsonValue = str_replace(chr(13), "\r", $jsonValue);
- /*
- $jsonValue = str_replace("\n", "\\n", $jsonValue);
- $jsonValue = str_replace("\r", "\\r", $jsonValue);
- $jsonValue = str_replace("\t", "\\t", $jsonValue);
- */
- //$jsonValue=str_replace("\r\n","\\n",htmlspecialchars(addslashes($jsonValue),ENT_QUOTES));
- echo $jsonValue;
- //echo "fff".$jsonValue;
- $arrayValue = json_decode($jsonValue, true);
- //Lorsque ce paramètre vaut TRUE, l'objet retourné sera converti en un tableau associatif.
- print_r($arrayValue);
- if (count($arrayValue) == 0) {
- echo "<br/>exception : JSON est vide !! contactez l'administrateur.";
- exit;
- }
|
Le problème est double :
- quand le code contient des retour ligne, json_decode part dans les choux et retourne un tableau vide.
- sur le CKeditor, il y a du code HTML qui est généré, avec éventuellement des attribut, donc les guillemets ne sont pas échappés. Mais d'autre guillemet qui font partie de la réaction sont échappé. Je ne peux donc pas échapper les guillemets restant sous peine de ne plus savoir qui fait partie de la rédaction et qui fait parti du code. Ces guillemets foutent le $£^¨ pour que json_decode s'en sorte.
J'ai testé différente chose avec serialize, replace etc, mais il y a toujours un truc qui ne marche pas. D'autre part, je suis sûr qu'en 2014, il y a une solution propre sans bidouille. Par exemple, j'ai trouvé aussi ça sans être convaincu : http://stackoverflow.com/questions [...] javascript
Je vous remercie de votre retour ! Message édité par naeco le 03-12-2014 à 14:11:03
|