0) { if(empty($texte)) { header('Location: index.php?erreur=empty_input'); } // supprimer espaces, tabulations et sauts de ligne en début et fin de chaine $texte = trim($texte); // supprimer les sauts de ligne $sautsDeLigne = array("\n", "\r", "\r\n"); $texte = str_replace($sautsDeLigne, '', $texte); // échapper tous les ', ", \ et caractère NULL $texte = addslashes($texte); } else { $texte = ''; // nouveau contenu } return($texte); } // réception du HTML créé par l'éditeur // le nom du fichier est celui dans $_SESSION['nomFichier'] function submitCKeditor($nomFichier) { $page = $_GET['page']; // déjà fait mais on ne sait jamais if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1) { header('Location: index.php?page=' . $page . '&erreur=connexion'); exit(); } // sécurité faille XSS avec htmLawed $configHtmLawed = array( 'safe'=>1, // protection contre les élements et attributs dangereux 'elements'=>'h2, h3, h4, p, br, span, i, strong, u, mark, blockquote, li, ol, ul, a, figure, hr, img, figcaption, table, tbody, tr, td', // paramètre optionnel: les balises non indiquées sont supprimées 'deny_attribute'=>'id', // gêner le JS hostile // on garde 'class' et 'style' utilisés par le ckediteur ); $specHtmLawed = ''; // optionnel: faire qu'un certain élément puisse n'avoir que certains attributs // de l'éditeur if(isset($_POST['contenu'])) // optionnel pour discographie { $contenu = $_POST['contenu']; // récupérer les liens multimedia //require("media.php"); //$contenu = mediaSubmit($contenu); $contenu = htmLawed($contenu, $configHtmLawed, $specHtmLawed); // supprimer espaces, tabulations et sauts de ligne en début et fin de chaine (pour l'entrée de l'éditeur) $contenu = trim($contenu); // ne pas continuer si la variable est vide (javascript mal supporté ou utilisation de IE, bug?, erreur de l'utilisateur), risque perte de contenu !! if($page != 'discographie' && $contenu == '') { header('Location: index.php?page=' . $page . '&erreur=contenu_vide'); exit(); } } if($page == 'discographie') { $titre = $_POST['titre']; $annee = $_POST['annee']; $pochette = $_FILES['upload']['name']; // des formulaires simples $titre = htmLawed($titre, $configHtmLawed, $specHtmLawed); $titre = trim($titre); $annee = htmLawed($annee, $configHtmLawed, $specHtmLawed); $annee = trim($annee); // on instancie avec l'enfant de OneArticle $Album = new Album($page); // enregistrement if($_GET['article'] == 0) { // page disco $Album->createVignette($titre, $annee, $pochette); // page de l'album if(!empty($_POST['contenu'])) { $Album->create($contenu); } } else { // page disco $Album->updateVignette($titre, $annee, $pochette); // page de l'album if(isset($_POST['contenu'])) { $Album->update($content); } } } // autres pages else { $Article = new OneArticle($page); if($_GET['article'] == 0) { $Article->create($contenu); } else { $Article->setFileName($nomFichier); $Article->update($contenu); } } } // lien sans http:// // un clic sur un lien dans l'éditeur affiche une infobulle montrant l'adresse cible du lien si celle-ci a déjà été précisée // il est possible de cliquer sur ce lien, ce qui ouvre un onglet avec le site demandé // toutefois si cette adresse est de type "domaine.fr" (sans http:// devant), le navigateur ne va pas rechercher un site mais un fichier comme si mon adresse était de type file:///fichier // tomber ainsi sur une page d'erreur est déroutant: // "ai-je perdu le texte que j'étais en train de taper?"" // solution 1 (mauvaise): activer la redirection en cas d'erreur 404 dans le .htaccess // solution 2 (façon pop-up): fermer ce nouvel onglet avec echo ''; // pour faire passer par le .htaccess l'info comme quoi la page précédente comportait un éditeur ouvert... function cleanHTML($contenu) {}