Censure des messages en javascript

Voir le sujet précédent Voir le sujet suivant Aller en bas

  • 0

Astuce Censure des messages en javascript

Message par Ea Lun 8 Aoû 2011 - 0:56

Censure des messages (avec Javascript)

Cette astuce ne fonctionne que pour les forums dont la version est Phpbb2, Phpbb3, PunBB et Invision. Elle permet de faire des remplacements dans les messages à l'affichage du sujet de façon un peu plus poussée que la censure normale proposée par Forumactif via la panneau d'administration :

Panneau d'administration  Général  Censure

Insertion du script Javascript


Panneau d'administration  Modules  HTML & JAVASCRIPT - Gestion des codes Javascript

Assurez-vous que la gestion des codes Javascript soit activée, puis créez un nouveau javascript ayant pour titre "Censure avancée" et pour placement "Sur les sujets" (plus d'informations sur la gestion des scripts).

Code:
var censorship =
[
  ["type de remplacement",/expression à chercher/,"par quoi on la remplace"],
  ["type de remplacement",/expression à chercher/,"par quoi on la remplace"],
  ["type de remplacement",/expression à chercher/,"par quoi on la remplace"],
  ["type de remplacement",/expression à chercher/,"par quoi on la remplace"]
];

function censorNode(a) {
  if(a.nodeType == 3) {
    for(var b in censorship) {
      if(censorship[b][0] === "text") {
        a.nodeValue = a.nodeValue.replace(censorship[b][1], censorship[b][2])
      }
    }
  }else {
    if(a.nodeType == 1) {
      for(b in censorship) {
        a.hasAttribute(censorship[b][0]) && a.setAttribute(censorship[b][0], a.getAttribute(censorship[b][0]).replace(censorship[b][1], censorship[b][2]))
      }
    }
    if(a.hasChildNodes()) {
      a = a.childNodes;
      for(b = 0;b < a.length;b++) {
        censorNode(a[b])
      }
    }
  }
}
$(function() {
  $(window).bind("load", function() {
    setTimeout(function() {
      var phpbb3 = "body#phpbb", invision = "#ipbwrapper", punbb = "#pun-foot";
      $( $(phpbb3).length ? "div.postbody > div.content" : $(invision).length ? "div.postbody > div.post-entry" : $(punbb).length ? "div.post div.post-entry" : "div.postbody" ).each(function() {
        censorNode(this);
        for(var a in censorship) {
          censorship[a][0] === "html" && censorship[a][1].test($(this).html()) && $(this).html($(this).html().replace(censorship[a][1], censorship[a][2]))
        }
      })
    }, 600)
  })
});

Pour choisir ce que vous censurez et par quoi vous le remplacer il suffit de modifier la partie du code :

Code:
[
  ["type de remplacement",/expression à chercher/,"par quoi on la remplace"],
  ["type de remplacement",/expression à chercher/,"par quoi on la remplace"],
  ["type de remplacement",/expression à chercher/,"par quoi on la remplace"],
  ["type de remplacement",/expression à chercher/,"par quoi on la remplace"]
];

Un [ à gauche et un ] à droite comme ceci, signifie qu'on déclare un tableau, ici on a donc un tableau de tableaux de 3 éléments.

  • Le premier élément est le type de remplacement, vous pouvez y mettre :

    • Soit "text" : toutes les parties textes de vos messages seront examinées pour voir si l'expression qu'on recherche ne s'y trouve pas (et si elle s'y trouve la remplacer), on cherche des chaines de textes et on les remplace par du texte ;

    • Soit "html" : tout le code html des messages sera examiné pour trouver l'expression qu'on recherche, et si elle s'y trouve elle sera remplacée par le remplacement spécifié, on cherche dans le code html du message entier et on fait le remplacement par du html ;

    • Soit autre chose (par exemple "src" ou "href") : le script regarde les balises dans les messages qui ont l'attribut spécifié (href par exemple c'est l'attribut qui indique vers quelle page on doit être redirigé vers le lien en cliquant dessus) et celles qui l'ont l'expression qu'on recherche y est remplacée par le texte de remplacement.

  • Le deuxième élément est l'expression qu'on recherche : il s'agit d'une expression régulière (une sorte de modèle avec des caractères spéciaux permettant de rechercher de façon plus complexe que ["toto" égale "toto" ?], pour plus d'info, voir : commentcamarche.net et toutjavascript.com) qui sera recherchée dans les messages.

  • Le dernier paramètre est ce par quoi sera remplacée l'expression trouvée.


N'oubliez pas de cliquer sur le bouton Valider afin de sauvegarder les modifications.

Exemple concret à tester sur votre forum


Insertion du script Javascript


Panneau d'administration  Modules  HTML & JAVASCRIPT - Gestion des codes Javascript

Assurez-vous que la gestion des codes Javascript soit activée, puis créez un nouveau javascript ayant pour titre "Censure avancée" et pour placement "Sur les sujets" (plus d'informations sur la gestion des scripts).

Code:
var censorship =
[
    ["text", /a/g, "b"],
    ["text", /slt/g, "salut"],
    ["href", /google\.com/g, "google.fr"],
    ["href", /^wiki:\/\//, "http://fr.wikipedia.org/w/index.php?search="],
    ["href", /^http:\/\/dE\//, "http://desencyclopedie.wikia.com/wiki/"],
    ["html", /\[wiki\](.*?)\[\/wiki\]/g, '<a href=http://fr.wikipedia.org/w/index.php?search=$1 title=$1>$1</a>']
];

function censorNode(a) {
  if(a.nodeType == 3) {
    for(var b in censorship) {
      if(censorship[b][0] === "text") {
        a.nodeValue = a.nodeValue.replace(censorship[b][1], censorship[b][2])
      }
    }
  }else {
    if(a.nodeType == 1) {
      for(b in censorship) {
        a.hasAttribute(censorship[b][0]) && a.setAttribute(censorship[b][0], a.getAttribute(censorship[b][0]).replace(censorship[b][1], censorship[b][2]))
      }
    }
    if(a.hasChildNodes()) {
      a = a.childNodes;
      for(b = 0;b < a.length;b++) {
        censorNode(a[b])
      }
    }
  }
}
$(function() {
  $(window).bind("load", function() {
    setTimeout(function() {
      var phpbb3 = "body#phpbb", invision = "#ipbwrapper", punbb = "#pun-foot";
      $( $(phpbb3).length ? "div.postbody > div.content" : $(invision).length ? "div.postbody > div.post-entry" : $(punbb).length ? "div.post div.post-entry" : "div.postbody" ).each(function() {
        censorNode(this);
        for(var a in censorship) {
          censorship[a][0] === "html" && censorship[a][1].test($(this).html()) && $(this).html($(this).html().replace(censorship[a][1], censorship[a][2]))
        }
      })
    }, 600)
  })
});

N'oubliez pas de cliquer sur le bouton Valider afin de sauvegarder les modifications.

Rédaction d'un message sur votre forum


Publier le message suivant sur votre forum :

Code:
wiki://yeah
 
http://dE/Jacky
 
[wiki]test[/wiki]
 
aaa avion
 
 
slt slt slt
 
a a  a a http://google.com

Résultat


Votre message a été censuré par le script Javascript. Vous devez constater l'affichage suivant :

Voir illustration :

Exemples de recherche / remplacement


  • ["text",/a/g,"å"]

    • "text" : la recherche/remplacement se fera dans le texte du message ;

    • /a/g : on cherche le caractère a (le g de /expression/g signifie qu'on fait une recherche de type "glouton", c'est à dire qu'on ne cherche pas juste la première occurrence mais toutes) ;

    • "å" : on remplacera ce qu'on trouve par le caractère "å" ;

    • Effet : la censure provoquera le remplacement de tout les caractères a du texte des messages par le caractère "å".


  • ["html", /\[iframe\(([0-9]+),([0-9]+)\)\]@(.*?)\[\/iframe\]/g, '<iframe style="border:none" width="$1" height="$2" src="$3"></iframe>']

    • "html"] : la recherche/remplacement se fera sur l'ensemble du code html du message ;

    • /\[iframe\(([0-9]+),([0-9]+)\)\]@(.*?)\[\/iframe\]/g : on cherche [iframe(chiffre,chiffre)]@adresse[/iframe] (le [ est un caractère spécial, pour le chercher il faut mettre un \ devant (pareille pour ], (, ) et /), (contenu) si il n'y a pas de \ devant les parenthèses capture le contenu (c'est à dire que les parenthèses ne seront pas cherchées mais que dans le remplacement on pourra mettre $1 pour récupérer le contenu de la première parenthèse, $2 pour récupérer le contenu de la deuxième parenthèse, ... ), [contenu] sans \ devant les crochets signifie une lettre de mon contenu (et à l'intérieur un - entre deux caractères signifie, le caractère à gauche, le caractère à droite et tout les caractères entre, donc [0-9] est pareille à [0123456789]), le + signifie que ce qui précède doit être présent 1 fois ou plus, le . signifie n'importe quel caractère (sauf un retour à la ligne), le * signifie ce qui précède doit être là 0 ou plusieurs fois, et le ? signifie ce qui précède doit être là 0 ou 1 fois) ;

    • '<iframe style="border:none" width="$1" height="$2" src="$3"></iframe>' : on remplacera ce qu'on trouve par <iframe style="border:none" width="$1" height="$2" src="$3"></iframe> avec $1, $2 et $3 qui viennent de l'expression cherchée comme suit : [iframe($1,$2)]@$3[/iframe].

    • Effet : la censure remplacera les [iframe(chiffre1,chiffre2)]@adresse[/iframe] (un @ devant l'adresse pour ne pas qu'elle se transforme en lien) se trouvant dans les messages par une vrai iframe.


  • ["href", /^(https?:)?\/\/www\.mechant-site\.com(\/.*)?$/, "/h4-ceci-est-un-mechant-site"]

    • "href" : la recherche/remplacement se fera sur l'ensemble des attributs href du message (c'est à dire en fait, sur les liens vers lesquels on est redirigé ) ;

    • /^(https?:)?\/\/www\.mechant-site\.com(\/.*)?$/ : on cherche cherche toutes les adresses de mechant-site.com (le . est un caractère spécial pour le chercher il faut mettre un \ devant, le ^ signifie que ce qui suit doit être tout au début dans ce qu'on recherche, le $ signifie que ce qui précède doit être tout à la fin dans ce qu'on recherche) ;

    • "/h4-ceci-est-un-mechant-site" : on remplacera ce qu'on trouve par "/h4-ceci-est-un-mechant-site" (une page html du forum expliquant que le site est un méchant site) ;

    • Effet : la censure remplacera les liens de mechant-site.com par un lien vers la page /h4-ceci-est-un-mechant-site du forum.


Ea

Ea
Aidactif
Aidactif

Messages : 23583
Inscrit(e) le : 04/04/2008

Ea a été remercié(e) par l'auteur de ce sujet.

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum