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 ); private static $specHtmLawed = ''; // optionnel: faire qu'un certain élément puisse n'avoir que certains attributs public static function secureString(string $chaine): string { $chaine = htmLawed($chaine, self::$configHtmLawed, self::$specHtmLawed); $chaine = trim($chaine); // supprimer espaces, tabulations et sauts de ligne en début et fin de chaine (pour l'entrée de l'éditeur) return $chaine; } } // erreurs à la création des mots de passe function removeSpacesTabsCRLF(string $chaine): string { $cibles = [' ', "\t", "\n", "\r"]; // doubles quotes !! return(str_replace($cibles, '', $chaine)); } // lien sans http:// function fixLinks($data) { // si une adresse est de type "domaine.fr" sans le http:// devant, le comportement des navigateurs est de rechercher un fichier comme si mon adresse commençait par file:// // tomber ainsi sur une page d'erreur est parfaitement déroutant // une erreur 404 est détectée et le visiteur redirigé, mais ça ne règle pas le problème // regex pour détecter les balises et ajouter http:// au début des liens si nécessaire $pattern = '#()#'; $remplacement = '$1http://$2$3'; // le "while" est ici parce que preg_replace s'arrête après avec matché une fois // plus exactement, le .* à la fin fait que la chaine détectée va jusqu'à la fin des données (à corriger peut-être avec ) while(preg_match($pattern, $data)) { $data = preg_replace($pattern, $remplacement, $data); } // 2ème problème, en train d'écrire un article, l'utilisateur clique sur ce lien qu'il vient de créer et qui apparaît dans l'infobulle, un nouvelle onglet apparaît // solution: fermer ce nouvel onglet avec echo ''; // comment déclencher le JS? en faisant qu'une erreur 404 causée pour cette raison soit particulière? return($data); }