IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Système] Supprimer commentaires des fichiers Javascript, Css, Html


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Points : 14
    Points
    14
    Par défaut [Système] Supprimer commentaires des fichiers Javascript, Css, Html
    Bonjour à tous,

    Je suis actuellement en train de réaliser un "builder" en PHP qui me permet de générer à la volée des nouvelles versions prêtes à être mise en production.

    Afin que les versions générées soient le plus optimale possible, je "clean" tant que possible mes sources : que ce soit du Php, du Js, du Css, de l'Html....

    Concernant mes sources Php je m'en sort très facilement puisque j'utilise la fonction php_strip_whitespace qui nettoie très bien les commentaires ainsi que les retours à la ligne.

    En revanche, j'essaie d'espèremment d'établir 2 expressions régulières :
    • Une pour mes sources CSS et HTML : elle doit supprimer commentaires + retours à la ligne + tabulations
    • Une pour mes sources JS : elle doit seulement supprimer les commentaires + tabulations (je ne veux pas supprimer les retours à la ligne car j'utilise certaines librairies Javascript qui n'utilise pas toutes le ";" en fin de ligne)


    Je souhaite que ces 2 types de commentaires soient supprimés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    /**
     * mon commentaire
     * @author toto
     */
     
     //mon commentaire qui tient que sur une ligne

    A cette heure où j'écris ce message je suit sur des trucs du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //Pour mes sources CSS et HTML
    $code = ereg_replace("\t|\n|\r{1,}", "", $codeANettoyer);
     
    //Pour mes sources JS
    $code = ereg_replace("\t{1,}|(\/\*.*\*\/)", "", $codeANettoyer);
    $code = ereg_replace("\r|\n{1,}\/{2,}.*[^\n^\r]", "\r", $code );
    Je vous laisse deviner que ca ne marche pas, donc est-ce quelqu'un est bon en expression régulière et voudrait bien m'aider ??

    Merci par avance

  2. #2
    Membre du Club
    Inscrit en
    Août 2003
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 49
    Points : 55
    Points
    55
    Par défaut
    Salut,

    Je pensais pas donner ces sources là mais bon...
    Pour le CSS:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function compress_css($buffer) {
        $buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
        $buffer = str_replace(array("\r\n", "\r", "\n", "\t", '  '), '', $buffer);
        $buffer = str_replace('{ ', '{', $buffer);
        $buffer = str_replace(' }', '}', $buffer);
        $buffer = str_replace('; ', ';', $buffer);
        $buffer = str_replace(', ', ',', $buffer);
        $buffer = str_replace(' {', '{', $buffer);
        $buffer = str_replace('} ', '}', $buffer);
        $buffer = str_replace(': ', ':', $buffer);
        $buffer = str_replace(' ,', ',', $buffer);
        $buffer = str_replace(' ;', ';', $buffer);
        return $buffer;
    }
    Pour le HTML: (il faut garder les retour à la ligne dans les textarea)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    function compress_html($buffer){
     
        $poz_current = 0;
        $poz_end = strlen($buffer)-1;
        $result = '';
     
        function compressbuffer_html($buffer)
        {
            $search = array('/\>[^\S ]+/s' , '/[^\S ]+\</s' , '/(\s)+/s');
            $replace = array( '>' , '<' , '\\1');
            $buffer = preg_replace($search, $replace, $buffer);
            $buffer = ereg_replace('<!\-\- [\/\ a-zA-Z]* \-\->', '', $buffer);
            return $buffer;
        }
     
        while ($poz_current < $poz_end){
            $t_poz_start = strpos($buffer, '<textarea', $poz_current);
            if ($t_poz_start === false){
                $buffer_part_2strip = substr($buffer, $poz_current);
                $temp = compressbuffer_html($buffer_part_2strip);
                $result .= $temp;
                $poz_current = $poz_end;
            }
            else{
                $buffer_part_2strip = substr($buffer, $poz_current, $t_poz_start-$poz_current);
                $temp = compressbuffer_html($buffer_part_2strip);
                $result .= $temp;
                $t_poz_end = strpos($buffer, '</textarea>', $t_poz_start);
                $temp = substr($buffer, $t_poz_start, $t_poz_end-$t_poz_start);
                $result .= $temp;
                $poz_current = $t_poz_end;
            }
        }
        return $result;
    }
    Pour le JS, j'utilise une class packer qui n'est pas de moi.

    Ces 2 codes sont des compilations de ce que j'ai pu trouver sur le net.
    Elles ne sont surement pas parfaites.

    ++

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Points : 14
    Points
    14
    Par défaut
    Je viens d'intégrer tes solutions dans mon code, et hop ca marche à merveille ! formidable

    Alors en prenant un peu de recul, il doit y avoir moyen de faire beaucoup plus simple pour le css et le html car ca me semble lourd mais vu que ce n'est pas destiné à de la production, les performances m'importent peu.

    Un grand merci, je classe le sujet comme résolu.

  4. #4
    Membre du Club
    Inscrit en
    Août 2003
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 49
    Points : 55
    Points
    55
    Par défaut
    Ouais, je pense que ça peut être optimisé.

    Mais je l'utilise à ma sauce dans un systeme de cache perso...
    En fait, je cré une copie des données compressées que si l'original à changer.

    Pour le html, tou doit pouvoir zapper la gestion des textarea en utilisant seulement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function compressbuffer_html($buffer)
        {
            $search = array('/\>[^\S ]+/s' , '/[^\S ]+\</s' , '/(\s)+/s');
            $replace = array( '>' , '<' , '\\1');
            $buffer = preg_replace($search, $replace, $buffer);
            $buffer = ereg_replace('<!\-\- [\/\ a-zA-Z]* \-\->', '', $buffer);
            return $buffer;
        }
    Content d'avoir pu t'aider...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Points : 14
    Points
    14
    Par défaut
    Je prends note, et je vais tester...

    Merci encore

  6. #6
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718
    Par défaut
    Déja tu va l'optimiser en remplaçant ereg par preg ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $text = preg_replace('#<!--.*?-->#s', '', $text); // HTML (<!--tralala-->)
    $text = preg_replace('#/\*.*?\*/#s', '', $text); // PHP (/*tralala*/)
    $text = preg_replace('#//.*$#m', '', $text); // C (// tralala)
    $text = preg_replace('`#[^!].*$`m', '', $text); // Perl  (#tralala)
    $text = preg_replace('#<%--.*?--%>#s', '', $text); // ASP (<%-- tralala --%>)

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Points : 14
    Points
    14
    Par défaut
    A là déjà ce code est nettement plus optimisé ! C'est cool :-)

    Merci

  8. #8
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718
    Par défaut
    J'avais oublié un tout ptit 's' à la fin de la premiere regex (qui empechai les commentaires sur plusieurs lignes).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SOAP SERVER] Fournir des fichiers en réponse (.html, .js, .css)
    Par darkendorf dans le forum Web & réseau
    Réponses: 2
    Dernier message: 19/05/2011, 14h11
  2. Réponses: 4
    Dernier message: 26/08/2010, 12h29
  3. Lire des fichiers Word en Html "FireFox"
    Par dot-_-net dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 30/08/2009, 14h36
  4. [Smarty] Automatiser les appels des fichiers externes (CSS/JS etc)
    Par speedev dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 15/06/2006, 13h43
  5. Supprimer / Renommer des fichiers
    Par mick030118 dans le forum C
    Réponses: 2
    Dernier message: 18/03/2006, 18h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo