Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Un aiutino con una RegExp molto utile?

    Ho trovato questa funzione molto utile, può essere utilizzata via buffer per ripulire l'html da tutti gli spazi non necessari.

    Io la utilizzo subito prima di effettuare il caching dei template html di uno script a cui sto lavorando (anche perchè eseguire questa regexp in realtime rallenterebbe parecchio il parsing php).
    La funzione è questa:
    Codice PHP:
    function sanitize_output($buffer){
        
    $search = array(
            
    '/\>[^\S ]+/s'//strip whitespaces after tags, except space
            
    '/[^\S ]+\</s'//strip whitespaces before tags, except space
            
    '/(\s)+/s'  // shorten multiple whitespace sequences
            
    );
        
    $replace = array('>','<','\\1');
        
    $buffer preg_replace($search$replace$buffer);
        return 
    $buffer;

    Il problema è che, ovviamente, esegue la conversione anche del contenuto all'intero dei tag script e style, cosa che vorrei evitare perchè da generalmente problemi.

    Se per esempio ho uno script così:
    codice:
    <script type="text/javascript">
    <!--
    richiamo_una_mia_bella_funzioncina();
    //-->
    </script>
    lui me lo riduce così :
    codice:
    <script type="text/javascript"></script>
    e lo script non funzionerà perchè la riga di codice è commentata.

    C'è qualcuno che può darmi una mano a migliorare questa funzione considerando che io e le regular expression non andiamo proprio d'accordo (o meglio, posso tranquillamente dire che che ci schifiamo reciprocamente)?

  2. #2
    up.
    Dai, possibile che non ci sia nessuno che sappia scrivere una regexp neanche troppo complicata?

    Per adesso, a chi interessa, ho risolto con due funzioni "prese in prestito" da Smarty:
    Codice PHP:
        function trimwhitespace($source){
            
    preg_match_all("!<script[^>]+>.*?</script>!is"$source$match);
            
    $_script_blocks $match[0];
            
    $source preg_replace("!<script[^>]+>.*?</script>!is",'@@@COMPRESSOR:TRIM:SCRIPT@@@'$source);
            
    preg_match_all("!<pre>.*?</pre>!is"$source$match);
            
    $_pre_blocks $match[0];
            
    $source preg_replace("!<pre>.*?</pre>!is",'@@@COMPRESSOR:TRIM:PRE@@@'$source);
            
    preg_match_all("!<textarea[^>]+>.*?</textarea>!is"$source$match);
            
    $_textarea_blocks $match[0];
            
    $source preg_replace("!<textarea[^>]+>.*?</textarea>!is",'@@@COMPRESSOR:TRIM:TEXTAREA@@@'$source);
            
    $source trim(preg_replace('/((?<!\?>)\n)[\s]+/m''\1'$source));
            
    trimwhitespace_replace("@@@COMPRESSOR:TRIM:TEXTAREA@@@",$_textarea_blocks$source);
            
    trimwhitespace_replace("@@@COMPRESSOR:TRIM:PRE@@@",$_pre_blocks$source);
            
    trimwhitespace_replace("@@@COMPRESSOR:TRIM:SCRIPT@@@",$_script_blocks$source);
            return 
    $source;
        }    
        function 
    trimwhitespace_replace($search_str$replace, &$subject) {
            
    $_len strlen($search_str);
            
    $_pos 0;
            for (
    $_i=0$_count=count($replace); $_i<$_count$_i++)
                if ((
    $_pos=strpos($subject$search_str$_pos))!==false)
                    
    $subject substr_replace($subject$replace[$_i], $_pos$_len);
                else
                    break;
        } 
    si richiama così:
    Codice PHP:
    $html_pulito trimwhitespace($html); 
    Ma non pulisce l'html come la funzione sopracitata.

    Non c'è nessuno che può darmi una mano, gentilmente?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.