Ver Mensaje Individual
  #4 (permalink)  
Antiguo 21/05/2008, 11:27
Avatar de pateketrueke
pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: reemplazo de cadena

he batallado... pero ya encontre una solucion, para ambos...

Código PHP:
<?php
        
        
//
        // el problema radica al resaltar palabras
        // entre el HTML, cierto... aqui vamos!
        
        
        
global $single;
        
$single = -1// llave
        
        
global $html;
        
$html = array(); // declaramos un arreglo
        
        
function marcador($test)
        {
            global 
$single$html;
            
$html[$single++] = "<{$test[1]}>"// salvamos
            
            
return '<!--/'.$single.'/-->'// parece broma?
        
}
        
        
        
        
// pruebas..
        
$texto 'Este es un <span style="color: red">dummy</span>
                espartano que no va al spa, le dijo a Dyle...
        <div>Byle no quizo dividir la pasta</div>.'
// muestra de HTML
        
        
        //
        // la idea esta en esquivar el HTML, entonces
        // lo escapamos primero... y luego resaltamos
        //
        
        
$texto2 preg_replace_callback('/<([^>]+\/?)>/is''marcador'$texto);
        
        
        
//
        // siendo honestos esta es una funcion que yo
        // tambien necesitaba, pero bueno... asi pasa
        
        
        
function resaltar($texto$que$marca '<b>\\1</b>')
        {
            
$que explode(' '$que); // separamos
            
$varias = array(); // expresion regular...

            
foreach ($que as $palabra)
            {
                
$palabra strip_tags($palabra); // cero HTML!
                
$varias[] = preg_quote($palabra); // escapamos
            
}
            
            
$todas join('|'$varias); // unimos |
            
$texto preg_replace("/($todas)/is"$marca$texto); // magia!
            
            
return $texto;
        }
        
        
        
// probamos?
        
$texto2 resaltar($texto2'le buscabamos un spa para refrescarnos mientras tomabamos con my sty que iba de low por div');
        
        
//
        // restauramos las marcas...
        
$texto2 preg_replace('/<!--\/([0-9]+)\/-->/es''$html[\\1 -1]'$texto2);
        
        
        print 
$texto2// fiuh!!
        
        // -------- solo esta integrar todo esto en una
        // sola funcion.... no?
?>
:) simplificando....
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.