Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012

    regexp su tag annidati HTML

    buongiorno a tutti..

    premetto che sono almeno 3 ora che cerco info in rete e su questo forum e che non trovo risposta, inoltre le regexp proprio non mi vanno giu


    dal' esempio di php.net ecco il pattern
    Codice PHP:
    function HTMLconvert($text)
      {
      
    preg_match_all("|<[^>]+>(.*)</[^>]+>|U",$text,$tmp_textsPREG_PATTERN_ORDER);

      
    $entities=array();
      foreach(
    $tmp_texts[1] as $t_key=>$t_val)
        {
        
    $entities[$t_key]=htmlentities($t_val);
        }
      
    $text=str_replace($tmp_texts[1],$entities,$text);
      return (
    $text);
      }





    $a='[b]questo è un <span>test</span>[/b]';
    $b='questo è un test';

    echo 
    HTMLconvert($a)."
    "
    ;
    echo 
    HTMLconvert($b); 
    nell' esempio con $a

    il risultato è
    codice:
    questo &Atilde;&uml; un &lt;span&gt;test</span>
    questo è un test
    tralasciando il discorso utf8 ecc.. come posso rendere ricorsivo il meccanismo?

    grazie a tutti pe ril supporto
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  2. #2
    Non ho ben capito cosa vuoi fare

  3. #3
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012


    in pratica voglio convertire testo contenuto in codice html con le relative entità html.

    quindi per farlo devo:

    -estrarre i testi da tutti i tag html

    -convertirli in entità

    -rimetterli al suo posto nel codice html originale

    -restituire il codice HTML con tutti suoi tag e i testi convertiti in entità html
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  4. #4
    Magari non c'entra nulla ma

    utilizare la funzione htmlentities() ?!?!?

  5. #5
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    htmlentities mi converte tutto, anche i < e > dei tag html.. il codice HTML deve rimanere tale
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  6. #6
    Sinceramente nn riesco a pensare a nessuna soluzione

  7. #7
    Codice PHP:
    $reg_expr "/(<\\/?\\w+\\s*[^>]*\\/?>)?([^<>]*)/is";
    preg_match_all($reg_expr$string$linesPREG_SET_ORDER); 
    In questo modo scomponi il testo in tag (aperture, chiusura o aperto-chiuso)+parte testuale.

    Poi prendi il testo: $lines[$i][2] e ci fai quello che vuoi senza toccare i tag.
    Poi alla fine ricomponi il tutto.
    Quello che devi fare è molto simile a quest'altra funzione che serve ad altro, ma credimi, la procedura che ti serve è identica:
    http://abidibo.otto.to.it/index.php?evt[blog-viewList]&id=17
    non ho il tempo di scriverti per intero la funzione, comunque il concetto è il seguente:
    - suddividi la stringa in tag+testo
    es:


    lalalalaboldlalala<img .../>ancora testo</p>
    viene suddiviso in:


    lalalala
    bold
    lalala
    <img.../>ancora testo
    </p>
    - prendi solo i testi con $lines[$i][2] e ci fai quello che vuoi
    es.
    lalalala
    bold
    etc..
    - ricomponi la stringa, per ogni $i
    $final_text .= $lines[$i][1].functionModifyText($lines[$i][2]);

    Lo so di non essere stato molto chiaro, ma è piu' semplice di queòl che sembra.
    ciao!
    =======================
    http://www.abidibo.net

  8. #8
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    grazie abi

    ho risolto così con il tuo pattern

    Codice PHP:
    $a='[b]questo sarà un [i]test[/i][/b]';
    $b='questo è un test';


    function 
    HTMLconvert3($text)
      {
      
    $finded   =array();
      
    $filtered =array();
      
    $pattern="/(<\/?\w+\s*[^>]*\/?> )?([^<>]*)/mis";
      
    preg_match_all($pattern$text$stringsPREG_SET_ORDER);

      foreach(
    $strings as $arr)
        {
        if( !empty(
    $arr[2]) ) $finded[]=$arr[2];
        }
      
      
    $elements=array_unique($finded);

      foreach(
    $elements as $el)
        {
        if (
    substr($el,0,1) !='/' && !in_array("/$el",$elements)) 
          {
          
    $filtered[]=$el;
          }
        }
      
      foreach(
    $filtered as $s_key=>$s_val)
        {
        if(
    mb_detect_encoding($s_val)=='UTF-8')
          {
    $s_val=iconv('UTF-8'"ISO-8859-1//TRANSLIT",$s_val);}
        else       
          {
    $s_val=iconv('ISO-8859-1'mb_detect_encoding($s_val)."//TRANSLIT",$s_val);}

        
    $entities[$s_key]=htmlentities($s_val);
        }
      
      
    $text=str_replace($filtered,$entities,$text);
      return (
    $text);
      }

    echo 
    HTMLconvert3($a);
    echo 
    HTMLconvert3($b);
    ?> 
    sinceramente è un pò macchinosa ma funziona
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

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.