Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    122

    Chi mi spiega espressione regolare ?

    Ciao,
    avevo già postato nel forum per un problema su PREG_MATCH_ALL.

    L'espressione cercata è questa :

    codice:
    preg_match_all("|<[\s\v]*img[\s\v][^>]*>|Ui", $plg_entrytext, $plg_matches, PREG_PATTERN_ORDER)
    Ora vorrei che mi si dicesse in italiano esattamente cosa viene cercato..io credo questo :

    Cercami la stringa img preceduta e seguita da un ritorno a capo.

    Non capisco cosa vuol dire
    codice:
    |Ui
    in fondo...

    Poichè sembra che la funzione vada in errore su PHP 5.2.13 c'è qualche altro modo di arrivare allo stesso risultato (usando una funzione diversa, oppure utilizzando altro codice ?)

    Grazie.
    Ciao

  2. #2
    |<[\s\v]*img[\s\v][^>]*>|Ui

    Allora analizziamo il pattern un pezzo alla volta:
    codice:
    |          delimitatore di inizio pattern
    <          un carattere '<'
    [\s\v]     un qualunque spazio vuoto
    *          ripetuto zero o piu' volte
    img        la stringa 'img'
    [\s\v]     un qualunque spazio vuoto
    [^>]       un qualunque carattere che NON sia un '>'
    *          ripetuto zero o piu' volte
    >          un carattere '>'
    |          delimitatore di fine pattern
    U          modificatore ungreedy (vedi nota sotto)
    i          modificatore che rende il pattern case insensitive
    Nota su ungreedy: i quantificatori (*, +, ecc.) di default tendono a prendere tutto cio' che possono, il modificatore U invece cambia il loro comportamento facendogli prendere il MINIMO possibile.

    Esempio:
    codice:
    stringa: questo "testo" contiene "pezzi" tra "virgolette"
    
    pattern: /".*"/
    trova: questo "testo" contiene "pezzi" tra "virgolette"
    
    pattern: /".*"/U
    trova: questo "testo" contiene "pezzi" tra "virgolette"
    il secondo pattern si puo' scrivere anche cosi':
    codice:
    /".*?"/
    usando il modificatore ? all'interno del patter invece del modificatore che si applica a tutti i quantificatori.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    122
    Grande !
    Una spiegazione precisa e molto ben fatta....

    Tu hai qualche idea del perchè un pattern così fatto potrebbe impallare la PREG_MATCH_ALL ?

  4. #4
    No, non ne ho idea. Che errore ti da'?

    Comunque usare le regular expressions per parsare l'HTML spesso e' una pessima idea. Se devi lavorare sulle immagini di un testo HTML dai un'occhiata a questa soluzione che ho suggerito in un altro thread: http://forum.html.it/forum/showthrea...readid=1409335

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    122
    Ciao,
    non mi viene restituito nessun errore, ma sembra che il programma esca e basta, e viene fuori una pagina html non completa...(se sei curioso ti posso indicare l'url per vedere cosa viene fuori)

    Sto usando un Plugin di Joomla plg_imagesized, sono riuscito a isolare la riga in cui vado in errore ma comunque andare a toccare il codice scritto da un altro non è semplice.

    Il tuo suggerimento è comunque buono, provo a vedere se riesco a cambiare il codice...

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    122
    Dammi ancora una mano per favore....purtroppo non sono espertissimo in PHP

    Ho prelevato il tuo codice postato nell'altro thread

    Codice PHP:
    codice PHP:

    include 
    'simple_html_dom.php';

    $html str_load_html($post->post_content);

    foreach( 
    $html->find('img') as $image ) {
        
    // qui avrai la width in $image->width
        // la height in $image->height
        // la sorgente in $image->src

    Se faccio un confronto con il mio codice :
    Codice PHP:
     $have_images preg_match_all("|<[\s\v]*img[\s\v][^>]*>|Ui"$plg_entrytext$plg_matchesPREG_PATTERN_ORDER) > 0

    $plg_entrytext va a sostituire $post->post_content
    $plg_matches è il risultato di ritorno ..il tuo $html.....

    Giusto ?

    Ora visto che la funzione cercava solo la prima immagine io dovrei gestire solo la dimensione 0 dell'array....

    Per testare che non ci sono immagini ?

    Grazie...

  7. #7
    Ma alla fine cos'e' che devi fare? Controllare che in $plg_entrytext non ci siano immagini?

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    122
    No.
    Tieni conto che non è un codice scritto da me...
    Da quello che ho potuto capire viene prelevato il codice html dell'articolo, e verificare se esiste all'interno un tag che identifica un'iimmagine.

    Se non c'è nessuna immagine viene formattato l'articolo di anteprima mettendo un'immagine di default altrimenti fa un tot di elaborazioni....ti allego il pezzo di codice incriminato..

    Codice PHP:
        //echo $article->sectionid.' '.$article->catid.'$$$
    ';
        $have_images = preg_match_all("|<[\s\v]*img[\s\v][^>]*>|Ui", $plg_entrytext, $plg_matches, PREG_PATTERN_ORDER) > 0;
        //$have_images = false;
        if (!$have_images && $fp_used_default_image && in_array($view[0],$viewtype)){
            $fp_default_img = '
    [img]'.$fp_default_image.'[/img]';
            $plg_entrytext .= $fp_default_img;
            $plg_matches[0][] = $fp_default_img;
            $have_images = TRUE;
            //$plg_matches[0][0] = $fp_default_img;
        }
        if ($have_images)    
        {
                $imagesxxx = 0;
                //if($ar_remove_link && $view[0] == '
    a') $plg_entrytext = preg_replace('@<(.*?)>(.*?)<\\/a>@s', '$2', $plg_entrytext);
                
                $this->remove_linked_image($ar_remove_link && $view[0] == '
    a', $excluded_images,$plg_entrytext);
              foreach ($plg_matches[0] as $plg_match) 
              {
                //echo htmlspecialchars($plg_match)."
    ";
                //echo $option.' '.$view.'
    ';
                //$num_articles = count($plg_matches[0]);
                // full link of image: [img]..[/img]
                //$viewtype assigned to array('
    f','c','s')
                if(in_array($view[0],$viewtype)) {//frontpage, catblog, sectionblog
                    $showbottext = $this->plg_images_resize2($plg_match,$fp_width,$fp_height,$quality, $fp_frcolor, $fp_bocolor, $widthm ,$heightm);
                    $showbottext = $this->remove_imagelink_info($showbottext,'
    width',$widthm);
                    $showbottext = $this->remove_imagelink_info($showbottext,'
    height',$heightm);
                    $showbottext = $this->change_imagelink_info($showbottext,'
    align',$fp_align);
                    $showbottext = $this->remove_imagelink_info($showbottext,'
    hspace',$fp_hspace);
                    $showbottext = $this->remove_imagelink_info($showbottext,'
    vspace',$fp_vspace);
                    $showbottext = $this->change_imagelink_info($showbottext,'
    style','width:'.$widthm.'px'.
                    '
    height:'.$heightm.'pxmargin:'.$fp_vspace.'px '.$fp_hspace.'px;');
                    $showbottext = $this->change_imagelink_info($showbottext,'
    border','0');
                    if($fp_remove_class)$showbottext = $this->remove_imagelink_info($showbottext,'
    class');
                    
                    if($fp_image_link) {      //$article->slug, $article->catslug, $article->sectionid
                        $link   = JRoute::_(ContentHelperRoute::getArticleRoute(@$article->slug, @$article->catslug, @$article->sectionid.":testset"));
                        $showbottext = '
    [url="'.$link.'"]'.$showbottext.'[/url]';
                    }
                    $imagesxxx = $imagesxxx + 1;
                    if($imagesxxx == 1) $showbottext2 = $showbottext;
                    if($imagesxxx > 1) $showbottext = '';
     
                }
                elseif($view[0] == '
    a' && $sized_img_article) {//Article
                    $showbottext = $this->plg_images_resize($plg_match,$ar_width,$ar_height,$quality, $widthm ,$heightm, $originallink);
                    $showbottext = $this->change_imagelink_info($showbottext,'
    width',$widthm);
                    $showbottext = $this->change_imagelink_info($showbottext,'
    height',$heightm);
                    $showbottext = $this->change_imagelink_info($showbottext,'
    align',$fp_align);
                    $showbottext = $this->change_imagelink_info($showbottext,'
    hspace',$fp_hspace);
                    $showbottext = $this->change_imagelink_info($showbottext,'
    vspace',$fp_vspace);
                    if($ar_remove_img_tag)
                    foreach($ar_remove_img_tag as $tag ) $showbottext = $this->remove_imagelink_info($showbottext,$tag);
                } else return ;

                //echo "$$$$".htmlspecialchars($showbottext)."
    ";
                //$originallink
                if($ar_link2originalimage && $view[0] == '
    a'){
                            //$findme   = '
    download.gif';
                            $pos = false;
                            if($excluded_images) 
                                foreach ($excluded_images as $findme) 
                                    if($findme) $pos = $pos || strpos($originallink, $findme);
                            //$pos = strpos((string)$originallink, $findme);
                            if ($pos === false) {
                                $plg_entrytext = str_replace( $plg_match, '
    [url="'.$originallink.'"]'.$plg_match.'[/url]', $plg_entrytext);
                            }
                        //$plg_entrytext = str_replace( $plg_match, '
    [url="'.$originallink.'"]'.$plg_match.'[/url]', $plg_entrytext);
                        }
                $plg_entrytext = str_replace( $plg_match, $showbottext, $plg_entrytext);    
              } 

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.