Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

HTML editor [ aporte ]

Estas en el tema de HTML editor [ aporte ] en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Bueno esta es una clase que permite trabajar usar funciones de reemplazo o lo que sea sobre el texto de un HTML (incluido el anchor ...
  #1 (permalink)  
Antiguo 16/07/2009, 14:19
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 1 mes
Puntos: 292
HTML editor [ aporte ]

Bueno esta es una clase que permite trabajar usar funciones de reemplazo o lo que sea sobre el texto de un HTML (incluido el anchor de los enlaces) con la seguridad de que no estamos tocando los tags o sus atributos.

Código PHP:
<?php

class htmlEditor {  

  
//Recibe un HTML y permite modificar el texto sin preocuparse de alterar los tags

  // __construct(html)  recibe el html
  // getNumberOfPieces()  devuelve el numero de trozos de texto desnudos
  // getPieceN(n) devuelve la frase que se pide
  // setPiceN(numero_de_frase,n) cambia esa frase (elemento del array en la clase)
  // getHTML() reconstruye el HTML uniendo las "frases" (texto puro) con los tags y lo devuelve.

  
private $html;
  private 
$tag;   // tags
  
private $notag// texto puro
  
private $notagCant;

  function 
__construct($html){
    
$this->html $html;
  
    if ((
strlen($this->html)>0) and ($this->html[0]=='<')){
     
$this->html ' '.$this->html
     
$quitar_espacio=TRUE;  
    }  

    
$this->no_tags();             
    
$this->notagCant count ($this->notag);
  }
  
  function 
getNumberOfPieces(){ 
    return 
$this->notagCant;
  }
  
  function 
getHTML(){        
    
    for (
$i=0;$i<$this->getNumberOfPieces();$i++){      
      
$a $this->notag[$i];      //  pude hacerle cualquier cosa
      
$b $this->tag[$i];
      
$html $html.$a.$b;        // vuelvo a unir las partes
    
}
    
    if (
$quitar_espacio){
      
$html =substr ($html,1,strlen($html)-1); // elimino espacio agregado por el tema del offset
    
}               
    return 
$html;
  }

  function 
setPieceN($element,$n){
    
$this->notag[$n]=$element;
  }
  
  function 
getPieceN($n){
    return 
$this->notag[$n];
  }
  
  private function 
no_tags(){  
  
// pre-condicion: la cadena debe empezar con algo distinto a un tag (<)

  
preg_match_all('@(<[/]?[a-z]{1,}[^>]{0,}[/]?[\w]{0,}?>)@is'$this->html$matches);
  
$full_tags $matches[0];
   
  
$full_tags array_reverse($full_tags); // tengo que sacar del principio
  
$cant count($full_tags);
 

  
$ini 0
  for (
$i=1;$i<=$cant+1;$i++){
    
$ti array_pop ($full_tags);
  
    
$fin  strpos($this->html$ti,$ini);  
    if (
$fin==NULL$fin=strlen($this->html);
    
    
$dif  = ($fin-$ini);
  
   
    
$inserto substr ($this->html,$ini,$dif);  
    
$this->notag[] = $inserto;       
    
//echo "($ini; $fin) ->$inserto <br/>";  
    
$ini $fin +strlen ($ti);  
  }  

  
$this->tag $matches[0];  
  }  
  
}


?>
- Los pasos para ulizarlo son crear una instancia de htmlEditor con NEW pasandole el HTML a editar
- Obtener el numero de "piezas" de texto (queda fragmentado) con getNumberOfPieces
- Obtener uno a uno cada fragmento para realizar las busquedas y reemplazos que corresponda (con str_replace, expresiones regulares, etc.)
- Actualizar cada fragmento cambiado con setPieceN()
- Pedir el HTML embebido en sus tags nuevamente con getHTML()

Espero les sea util

Pronto una clase que hace uso de esta.....
__________________
Salu2!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:15.