summaryrefslogtreecommitdiff
path: root/controller/Security.php
diff options
context:
space:
mode:
Diffstat (limited to 'controller/Security.php')
-rw-r--r--controller/Security.php29
1 files changed, 17 insertions, 12 deletions
diff --git a/controller/Security.php b/controller/Security.php
index c4724de..39205c1 100644
--- a/controller/Security.php
+++ b/controller/Security.php
@@ -32,22 +32,27 @@ function removeSpacesTabsCRLF(string $chaine): string
32// lien sans http:// 32// lien sans http://
33function fixLinks($data) 33function fixLinks($data)
34{ 34{
35 // 1/
35 // 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:// 36 // 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://
36 // tomber ainsi sur une page d'erreur est parfaitement déroutant 37 // tomber ainsi sur une page d'erreur est parfaitement déroutant
37 // une erreur 404 est détectée et le visiteur redirigé, mais ça ne règle pas le problème
38 38
39 // regex pour détecter les balises <a> et ajouter http:// au début des liens si nécessaire 39 // regex pour détecter les balises <a> et ajouter http:// au début des liens si nécessaire
40 $pattern = '#(<a.*href=")((?!https?://).*)(".*>)#'; 40 $pattern = '#(<a[^>]+href=")((?!https?://)[^>]+>)#';
41 $remplacement = '$1http://$2$3'; 41 //$data = preg_replace($pattern, '$1http://$2', $data);
42 // le "while" est ici parce que preg_replace s'arrête après avec matché une fois 42
43 // plus exactement, le .* à la fin fait que la chaine détectée va jusqu'à la fin des données (à corriger peut-être avec </a>) 43 // 2/
44 while(preg_match($pattern, $data)) 44 // cas où la regex fait mal son boulot:
45 { 45 // l'erreur 404 est gérée par le .htaccess
46 $data = preg_replace($pattern, $remplacement, $data); 46 // et le visiteur est redirigé à la page "menu"
47 } 47 // (ça ne règle pas le problème mais c'est mieux)
48 48
49 // 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 49 // 3/
50 // solution: fermer ce nouvel onglet avec echo '<SCRIPT>javascript:window.close()</SCRIPT>'; 50 // quand l'éditeur est ouvert (avant de valider l'article),
51 // le lien qu'on vient de créer apparaît dans l'infobulle,
52 // cliquer dessus ouvre un onglet sur une erreur 404
53 // solution partielle avec le .htaccess
54 //
55 // solution? fermer ce nouvel onglet avec echo '<SCRIPT>javascript:window.close()</SCRIPT>';
51 // comment déclencher le JS? en faisant qu'une erreur 404 causée pour cette raison soit particulière? 56 // comment déclencher le JS? en faisant qu'une erreur 404 causée pour cette raison soit particulière?
52 57
53 return($data); 58 return($data);