diff options
Diffstat (limited to 'controller/ckeditor.php')
| -rw-r--r-- | controller/ckeditor.php | 40 |
1 files changed, 29 insertions, 11 deletions
diff --git a/controller/ckeditor.php b/controller/ckeditor.php index 4b4297a..d6ea8ad 100644 --- a/controller/ckeditor.php +++ b/controller/ckeditor.php | |||
| @@ -47,6 +47,9 @@ function submitCKeditor() | |||
| 47 | if(isset($_POST['contenu'])) // optionnel pour discographie | 47 | if(isset($_POST['contenu'])) // optionnel pour discographie |
| 48 | { | 48 | { |
| 49 | $contenu = Security::secureString($_POST['contenu']); | 49 | $contenu = Security::secureString($_POST['contenu']); |
| 50 | |||
| 51 | // liens sans http:// devant | ||
| 52 | $contenu = fixLinks($contenu); | ||
| 50 | 53 | ||
| 51 | // récupérer les liens multimedia | 54 | // récupérer les liens multimedia |
| 52 | //require("media.php"); | 55 | //require("media.php"); |
| @@ -142,14 +145,29 @@ function submitCKeditor() | |||
| 142 | 145 | ||
| 143 | 146 | ||
| 144 | // lien sans http:// | 147 | // lien sans http:// |
| 145 | // 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 | 148 | // 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:// |
| 146 | // il est possible de cliquer sur ce lien, ce qui ouvre un onglet avec le site demandé | 149 | // tomber ainsi sur une page d'erreur est parfaitement déroutant |
| 147 | // 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 | 150 | // une erreur 404 est détectée et le visiteur redirigé, mais ça ne règle pas le problème |
| 148 | // tomber ainsi sur une page d'erreur est déroutant: | 151 | // 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 |
| 149 | // "ai-je perdu le texte que j'étais en train de taper?"" | 152 | // solution: fermer ce nouvel onglet avec echo '<SCRIPT>javascript:window.close()</SCRIPT>'; |
| 150 | // solution 1 (mauvaise): activer la redirection en cas d'erreur 404 dans le .htaccess | 153 | // le .htaccess doit pour ça détecter que l'erreur 404 est particulière |
| 151 | // solution 2 (façon pop-up): fermer ce nouvel onglet avec echo '<SCRIPT>javascript:window.close()</SCRIPT>'; | 154 | |
| 152 | // pour faire passer par le .htaccess l'info comme quoi la page précédente comportait un éditeur ouvert... | 155 | function fixLinks($data) |
| 153 | 156 | { | |
| 154 | function cleanHTML($contenu) | 157 | // regex pour détecter les balises <a>, analyser les liens à l'interieur et les modifier si nécessaire |
| 155 | {} | 158 | $pattern = '#<a href=".*">.*</a>#'; |
| 159 | |||
| 160 | if(preg_match($pattern, $data)) | ||
| 161 | {} | ||
| 162 | |||
| 163 | //$remplacement = 'http://$0'; | ||
| 164 | //$data = preg_replace($pattern, $remplacement, $data); | ||
| 165 | |||
| 166 | // contrairement à ce qui dit la doc | ||
| 167 | // https://www.php.net/manual/fr/filter.filters.validate.php | ||
| 168 | // une adresse du type "domaine.fr" ne passe pas le filtre | ||
| 169 | // il renvoie false, ce qui nous arrange ici! | ||
| 170 | //var_dump(filter_var($link, FILTER_VALIDATE_URL)); | ||
| 171 | |||
| 172 | return($data); | ||
| 173 | } | ||
