diff options
Diffstat (limited to 'controller/Security.php')
-rw-r--r-- | controller/Security.php | 29 |
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:// |
33 | function fixLinks($data) | 33 | function 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); |