Foros del Web » Programando para Internet » PHP »

Problema al reemplazar cadenas

Estas en el tema de Problema al reemplazar cadenas en el foro de PHP en Foros del Web. Hola amigos, necesito un poco de ayuda con este tema. les pondre un ejemplo, tengo una variable que contiene codigo html: &code = '<div name="div_x">equis<hr ...
  #1 (permalink)  
Antiguo 25/02/2011, 00:19
 
Fecha de Ingreso: julio-2010
Mensajes: 17
Antigüedad: 14 años, 4 meses
Puntos: 0
Pregunta Problema al reemplazar cadenas

Hola amigos, necesito un poco de ayuda con este tema.
les pondre un ejemplo, tengo una variable que contiene codigo html:

&code = '<div name="div_x">equis<hr name="hr_x"></div><div></div>'

y lo q qiero es localizar el DIV q contiene "equis<hr name="hr_x">" y quitar esa cadena:

"equis<hr name="hr_x">"

tomen en cuenta q la cadena tiene comillas dobles, como podria hacerlo?
Gracias espero su ayuda..
  #2 (permalink)  
Antiguo 25/02/2011, 04:18
 
Fecha de Ingreso: enero-2007
Mensajes: 146
Antigüedad: 17 años, 9 meses
Puntos: 16
Respuesta: Problema al reemplazar cadenas

Las expresiones regulares son tus amigas ;)
Código PHP:
Ver original
  1. $code = preg_replace( "#<div name=\"div_x\">equis<hr name=\"hr_x\"></div><div></div>#is", "<div name=\"div_x\"></div><div></div>",$code);

Ese código que te he puesto hace lo que pides, aunque supongo que querrás algo más elaborado, cambiando las x por números y cosas así. Pero la idea por donde empezar, ya la tienes sobre la mesa :)
  #3 (permalink)  
Antiguo 25/02/2011, 09:47
 
Fecha de Ingreso: julio-2010
Mensajes: 17
Antigüedad: 14 años, 4 meses
Puntos: 0
Exclamación Respuesta: Problema al reemplazar cadenas

Cita:
Iniciado por WeSoRz Ver Mensaje
Las expresiones regulares son tus amigas ;)
Código PHP:
Ver original
  1. $code = preg_replace( "#<div name=\"div_x\">equis<hr name=\"hr_x\"></div><div></div>#is", "<div name=\"div_x\"></div><div></div>",$code);

Ese código que te he puesto hace lo que pides, aunque supongo que querrás algo más elaborado, cambiando las x por números y cosas así. Pero la idea por donde empezar, ya la tienes sobre la mesa :)
gracias amigo... y si qisieras agregar las barras de otra forma q no sea manual? q usarias? addslashes o cual ?
  #4 (permalink)  
Antiguo 25/02/2011, 09:58
 
Fecha de Ingreso: enero-2007
Mensajes: 146
Antigüedad: 17 años, 9 meses
Puntos: 16
Respuesta: Problema al reemplazar cadenas

Sí, por ejemplo addslashes, o en éste caso utilizar comillas simples para delimitar la cadena.
  #5 (permalink)  
Antiguo 25/02/2011, 10:04
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: Problema al reemplazar cadenas

Cita:
Iniciado por WeSoRz Ver Mensaje
Las expresiones regulares son tus amigas ;)
Código PHP:
Ver original
  1. $code = preg_replace( "#<div name=\"div_x\">equis<hr name=\"hr_x\"></div><div></div>#is", "<div name=\"div_x\"></div><div></div>",$code);

Ese código que te he puesto hace lo que pides, aunque supongo que querrás algo más elaborado, cambiando las x por números y cosas así. Pero la idea por donde empezar, ya la tienes sobre la mesa :)
¿Para que usar expresiones regulares en una cadena estatica que no cambia?
Mejor usa str_ireplace()
http://www.php.net/manual/en/function.str-ireplace.php
  #6 (permalink)  
Antiguo 25/02/2011, 10:11
 
Fecha de Ingreso: julio-2010
Mensajes: 17
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Problema al reemplazar cadenas

Cita:
Iniciado por WeSoRz Ver Mensaje
Las expresiones regulares son tus amigas ;)
Código PHP:
Ver original
  1. $code = preg_replace( "#<div name=\"div_x\">equis<hr name=\"hr_x\"></div><div></div>#is", "<div name=\"div_x\"></div><div></div>",$code);

Ese código que te he puesto hace lo que pides, aunque supongo que querrás algo más elaborado, cambiando las x por números y cosas así. Pero la idea por donde empezar, ya la tienes sobre la mesa :)
cuando uso "preg_replace"
me sale este error: Unknown modifier '<'
  #7 (permalink)  
Antiguo 25/02/2011, 10:13
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: Problema al reemplazar cadenas

Usa str_ireplace()
  #8 (permalink)  
Antiguo 25/02/2011, 10:17
 
Fecha de Ingreso: julio-2010
Mensajes: 17
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Problema al reemplazar cadenas

Cita:
Iniciado por Ronruby Ver Mensaje
Usa str_ireplace()
pero lo uso agregandole barras a la cadena con addslashes?
  #9 (permalink)  
Antiguo 25/02/2011, 10:24
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: Problema al reemplazar cadenas

Eso depende de como uses las comillas.
Si esta entre comillas simples no hay necesidad de escapar las cadenas dobles, pero si usas dobles si tienes que escaparlas.
  #10 (permalink)  
Antiguo 25/02/2011, 10:38
 
Fecha de Ingreso: julio-2010
Mensajes: 17
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Problema al reemplazar cadenas

aqui les expongo mejor lo q esetoy tratando de hacer:

Código PHP:
Ver original
  1. <?
  2. include('../config.php');
  3. $user = $_SESSION['user'];
  4. $code=$_POST['entrada'] . '<hr color="#CCCCCC" style="margin-bottom:10px; margin-top:10px;">';
  5. $sql = "SELECT * FROM users WHERE nick='$user'";
  6. $resultado = mysql_query($sql,$con);
  7. $datos = mysql_fetch_array($resultado);
  8. if ($code==''){
  9.     echo'<script type="text/javascript">history.back();</script>';
  10. }else{
  11.  
  12.         // la variable $datos[12] recoje una porcion de codigo dentro de un div por ejemplo:
  13.         /* <div name="div_x">equis<hr name="hr_x"></div><div></div> */
  14.         // y la variable $code recoje una porcion de la cadena de arriba por ejemplo:
  15.         /* <div name="div_x">equis<hr name="hr_x"></div> */
  16.     $dato = addslashes($datos[12]);
  17.     $code = addslashes($code);
  18.  
  19.         // lo q qiero es q el resultado me de algo como esto:
  20.         /* <div></div> */
  21.         // por supuesto en la realidad el codigo es mucho mas complejo por eso necesito
  22.         // q todo este en variables
  23.     $newCode =  str_ireplace($Ocode, " ", $dato);
  24.  
  25.          // echo para verificar en $newCode q se ha realizado el reemplazo
  26.     echo $newCode;
  27.     //mysql_query("UPDATE users SET post='$newCode' WHERE nick='$user'");
  28.     /*echo'<script type="text/javascript">parent.location="perfil.php"</script>';*/
  29. }
  30. ?>

espero q me puedan ayudar
  #11 (permalink)  
Antiguo 25/02/2011, 11:57
 
Fecha de Ingreso: enero-2007
Mensajes: 146
Antigüedad: 17 años, 9 meses
Puntos: 16
Respuesta: Problema al reemplazar cadenas

Cita:
Iniciado por Ronruby Ver Mensaje
¿Para que usar expresiones regulares en una cadena estatica que no cambia?
Mejor usa str_ireplace()
http://www.php.net/manual/en/function.str-ireplace.php
Y cómo sabes que no cambia? Porque cuando planteó la pregunta no puso nada, y si te fijas, en mi comentario añado el tema de las X, el cual no sabía para qué las utilizaba. Además, preg_replace permite la búsqueda tanto de forma horizontal como vertical (\n), cosa que str_replace no.
http://www.orwell.ru/test/Accessibil...r/php/_replace
Ahí puedes ver benchmark de una función y otra.

Pero vamos, que si quiere utilizar la otra para quitar una cadena estática, perfecto.

Código PHP:
Ver original
  1. $newCode =  str_ireplace($Ocode, " ", $dato);
Ahí llamas de otra forma a la variable $code.

Dicho todo esto, y viendo el código que has puesto te recomiendo, si pretendes vaciar por ejemplo un div con una id asignada, y un contenido dinámico, las espresiones regulares. Como por ejemplo:
Código PHP:
Ver original
  1. 1.
  2.       $code = preg_replace( "#<div id=\"div_x\">.*?</div>#is", "<div id=\"div_x\"></div>",$code);
La cual vacía el div con id div_x, tenga el contenido que tenga.

Última edición por WeSoRz; 25/02/2011 a las 12:04
  #12 (permalink)  
Antiguo 25/02/2011, 12:11
 
Fecha de Ingreso: julio-2010
Mensajes: 17
Antigüedad: 14 años, 4 meses
Puntos: 0
Información Respuesta: Problema al reemplazar cadenas

Cita:
Iniciado por WeSoRz Ver Mensaje
Y cómo sabes que no cambia? Porque cuando planteó la pregunta no puso nada, y si te fijas, en mi comentario añado el tema de las X, el cual no sabía para qué las utilizaba. Además, preg_replace permite la búsqueda tanto de forma horizontal como vertical (\n), cosa que str_replace no.

Pero vamos, que si quiere utilizar la otra para quitar una cadena estática, perfecto.

Código PHP:
Ver original
  1. $newCode =  str_ireplace($Ocode, " ", $dato);
Ahí llamas de otra forma a la variable $code.

Dicho todo esto, y viendo el código que has puesto te recomiendo, si pretendes vaciar por ejemplo un div con una id asignada, y un contenido dinámico, las espresiones regulares. Como por ejemplo:
Código PHP:
Ver original
  1. 1.
  2.       $code = preg_replace( "#<div id=\"div_x\">.*?</div>#is", "<div id=\"div_x\"></div>",$code);
La cual vacía el div con id div_x, tenga el contenido que tenga.
si amigo se q en las expresiones regulares y "preg_replace" estan la solucion...
el problema es q como la cadena esta contenida en una variable no puedo colocar las barras y "#" de manera manual, el problema de "preg_replace" es q me saca este error:

" preg_replace() [function.preg-replace]: Unknown modifier '<' "

por eso uso "addslashes" pero al parecer meda error con los caracteres "<"
agradeceria q me ayudaras un poco por eso puse el codigo completo del php
  #13 (permalink)  
Antiguo 25/02/2011, 14:06
 
Fecha de Ingreso: enero-2007
Mensajes: 146
Antigüedad: 17 años, 9 meses
Puntos: 16
Respuesta: Problema al reemplazar cadenas

Sólo hay que escapar el patrón.
Código PHP:
Ver original
  1. $code = '<div name="div_x">equis<hr name="hr_x"></div><div></div>'; // Codigo completo
  2. $codeS = addslashes('<div name="div_x">equis<hr name="hr_x"></div>'); // Código que queremos quitar
  3.  
  4. $code = preg_replace( "#(.*?)".$codeS."(.*?)#is", "\\1\\2",$code);
  5.  
  6. echo $code;
  7. // Devuelve
  8. // <div></div>
Ese ejemplo es funcional. En tu caso $code sería $datos[12] (cadena completa) y $codeS sería $code (porción que quieres quitar).
  #14 (permalink)  
Antiguo 25/02/2011, 14:38
 
Fecha de Ingreso: julio-2010
Mensajes: 17
Antigüedad: 14 años, 4 meses
Puntos: 0
Pregunta Respuesta: Problema al reemplazar cadenas

Cita:
Iniciado por WeSoRz Ver Mensaje
Sólo hay que escapar el patrón.
Código PHP:
Ver original
  1. $code = '<div name="div_x">equis<hr name="hr_x"></div><div></div>'; // Codigo completo
  2. $codeS = addslashes('<div name="div_x">equis<hr name="hr_x"></div>'); // Código que queremos quitar
  3.  
  4. $code = preg_replace( "#(.*?)".$codeS."(.*?)#is", "\\1\\2",$code);
  5.  
  6. echo $code;
  7. // Devuelve
  8. // <div></div>
Ese ejemplo es funcional. En tu caso $code sería $datos[12] (cadena completa) y $codeS sería $code (porción que quieres quitar).
Gracias si funciona, pero necesito escapar cualqier caracter html como "#" comas y ese tipo de caracteres... me podrias decir como hacerlo? no se mucho sobre eso
  #15 (permalink)  
Antiguo 25/02/2011, 14:59
 
Fecha de Ingreso: julio-2010
Mensajes: 17
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Problema al reemplazar cadenas

me sigue dando error:

Warning: preg_replace() [function.preg-replace]: Unknown modifier 'C' in /home/elecsvz/public_html/user/borrar_post.php on line 24

les voy a poner el ejemplo:

valor de $datos[12] ="<div id="25022011105934" style="width:500px; text-align:justify; left:50%; margin-left:-250px"><a id="25022011105934_a" href="javascript:void(0)" onclick="borrar('25022011105934')"><img src="http://cdn.iconfinder.net/data/icons/function_icon_set/cancel_48.png" height="20" width="20" style=" position:absolute; margin-left:-25px"></a>dhfgd<div style="text-align:right"><strong>25/02/2011 10:59 am</strong></div></div><hr color="#CCCCCC" style="margin-bottom:10px; margin-top:10px"><div id="25022011105927" style="width:500px; text-align:justify; left:50%; margin-left:-250px"><a id="25022011105927_a" href="javascript:void(0)" onclick="borrar('25022011105927')"><img src="http://cdn.iconfinder.net/data/icons/function_icon_set/cancel_48.png" height="20" width="20" style=" position:absolute; margin-left:-25px"></a>hGdh<div style="text-align:right"><strong>25/02/2011 10:59 am</strong></div></div><hr color="#CCCCCC" style="margin-bottom:10px; margin-top:10px">"

como pueden ver tiene varios caracteres en mayusculas y minusculas, comillas dobles, comillas simples, comas, mayores que, menores que, links y como los id de los div son dinamicos no puedo manerjarlo por CSS.

valor de $code despues de pasarlo por addslashes ="<div id="\&quot;25022011105934\&quot;" style="\&quot;width:500px;" text-align:justify;="" left:50%;="" margin-left:-250px\"=""><a id="\&quot;25022011105934_a\&quot;" href="\&quot;javascript:void(0)\&quot;" onclick="\&quot;borrar(\'25022011105934\')\&quot;" ><img src="\&quot;http://cdn.iconfinder.net/data/icons/function_icon_set/cancel_48.png\&quot;" height="\&quot;20\&quot;" width="\&quot;20\&quot;" style="\&quot;" position:absolute;="" margin-left:-25px\"=""></a>dhfgd<div style="\&quot;text-align:right\&quot;"><strong>25/02/2011 10:59 am</strong></div></div><hr color="\&quot;#CCCCCC\&quot;" style="\&quot;margin-bottom:10px;" margin-top:10px;\"="">"

la linea 24 es:

$newCode = preg_replace("#(.*?)" . $code . "(.*?)#is", "\\1\\2", $datos[12]);

y como no son valores fijos tienen q estar contenidos en variables...
  #16 (permalink)  
Antiguo 25/02/2011, 15:13
 
Fecha de Ingreso: julio-2010
Mensajes: 17
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Problema al reemplazar cadenas

quite el estilo del tag <hr> que era el q me daba problema en la sintaxis, pero no me reemplaza la cadena ya no se q mas hacer....

me devuelve la misma
  #17 (permalink)  
Antiguo 25/02/2011, 17:09
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: Problema al reemplazar cadenas

Cita:
Iniciado por WeSoRz
Y cómo sabes que no cambia? Porque cuando planteó la pregunta no puso nada, y si te fijas, en mi comentario añado el tema de las X, el cual no sabía para qué las utilizaba. Además, preg_replace permite la búsqueda tanto de forma horizontal como vertical (\n), cosa que str_replace no.
Exactamente por eso, porque no se especifico en la pregunta y como le expusiste un ejemplo y supuse "le funciono", crei que era estatica.
Ahora bien, str_replace si trabaja de forma "vertical"

Código PHP:
<?php

$string 
"blah blah\nhey\n
heyhey"
;

echo 
str_replace("hey""hi"$string);

?>
  #18 (permalink)  
Antiguo 25/02/2011, 17:49
 
Fecha de Ingreso: julio-2010
Mensajes: 17
Antigüedad: 14 años, 4 meses
Puntos: 0
Exclamación Respuesta: Problema al reemplazar cadenas

Cita:
Iniciado por Ronruby Ver Mensaje
Exactamente por eso, porque no se especifico en la pregunta y como le expusiste un ejemplo y supuse "le funciono", crei que era estatica.
Ahora bien, str_replace si trabaja de forma "vertical"

Código PHP:
<?php

$string 
"blah blah\nhey\n
heyhey"
;

echo 
str_replace("hey""hi"$string);

?>
si amigo pero es q con str_replace no me funciona...

tampoco con preg_replace... estoy tratando de hacer el reemplazo en la misma base de datos con la instruccion REPLACE de mysql pero tampoco me funciona... asi q se me estan agotando las ideas...
  #19 (permalink)  
Antiguo 25/02/2011, 18:54
 
Fecha de Ingreso: julio-2010
Mensajes: 17
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Problema al reemplazar cadenas

bueno amigos les agradara saber q encontre la solucion...

un javascript en el la pagina del formulario donde reemplazo las cadenas

si qieren ver el resultado les dejo un link:
se logean con:
usuario : pepe
clave: 1234

http://www.elecsvzsystem.x10.mx/login.php
  #20 (permalink)  
Antiguo 26/02/2011, 03:26
 
Fecha de Ingreso: enero-2007
Mensajes: 146
Antigüedad: 17 años, 9 meses
Puntos: 16
Respuesta: Problema al reemplazar cadenas

Cita:
Iniciado por Ronruby Ver Mensaje
Exactamente por eso, porque no se especifico en la pregunta y como le expusiste un ejemplo y supuse "le funciono", crei que era estatica.
Ahora bien, str_replace si trabaja de forma "vertical"

Código PHP:
<?php

$string 
"blah blah\nhey\n
heyhey"
;

echo 
str_replace("hey""hi"$string);

?>
jejeje y si tienes el código:
Código PHP:
Ver original
  1. $code = '<div name="div_x">equis<hr name="hr_x">
  2. </div>
  3. <div></div>'
Sin saber como están los saltos de línea?

Yo insisto, como no lo especificó y vi x por ahí, supongo que quería hacer algo más enrevesado. Lo que tampoco voy a entrar en una discusión absurda de cual opción es mejor: entré, vi el problema, respondí y ya está.

Cita:
Iniciado por elecs Ver Mensaje
bueno amigos les agradara saber q encontre la solucion...

un javascript en el la pagina del formulario donde reemplazo las cadenas

si qieren ver el resultado les dejo un link:
se logean con:
usuario : pepe
clave: 1234

http://www.elecsvzsystem.x10.mx/login.php
Para escapar todos los caracteres especiales de las expresiones regulares, hay que utilizar preg_quote. addslashes es para strings entrecomillados únicamente.
Por ejemplo:
Código PHP:
Ver original
  1. $codeS = preg_quote('<div name="div_x">equis<hr name="hr_x"></div>','#');
Lo que nunca haría sería fiarme de un javascript para reemplazar un código si es enviado al servidor (no sé si reemplazas para mostrarlo o para enviarlo al servidor). Ten en cuenta que no es la solución más limpia, ya que el JS se ejecuta en el cliente, con las cosas que eso conlleva.
  #21 (permalink)  
Antiguo 26/02/2011, 18:09
 
Fecha de Ingreso: julio-2010
Mensajes: 17
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Problema al reemplazar cadenas

Cita:
Lo que nunca haría sería fiarme de un javascript para reemplazar un código si es enviado al servidor (no sé si reemplazas para mostrarlo o para enviarlo al servidor). Ten en cuenta que no es la solución más limpia, ya que el JS se ejecuta en el cliente, con las cosas que eso conlleva.
bueno en mi caso me sirvio porq no se si te fijaste q casi todo el documento se crea de manera dinamica y ya una vez el documento creado esta en el cliente, la funcionalidad q qeria agregar a la pagina es "quitar un post especifico entre varios", para ello antes de guardar el contenido del textarea le agrego un div con una id q es la fecha con segundos y en formato de 24h para q cada div sea unico y un boton rojo llamando al evento borrar con el parametro del id del div q lo contiene, y lo guardo en la bd. (todo esto del lado del servidor)

el documento del perfil en el servidor recupera los post y crea los div con id unicos, una ves cargado el documento se encuentra del lado del cliente otra vez donde un simple JS recupera todos los post creados en la portada y el boton rojo manda al JS cmo parametro el id del div.

el JS se encarga de obtener todo lo q contiene el div del post q deseo borrar incluyendo el div mismo, hace el remplazo y el resultado lo vierte en otro formulario con un input de tipo oculto y muy importante lo envia, el formulario tiene como valor actio="borrarpost.php".

con una simple instruccion UPDATE de sql actualizo el campo, la pagina redirige al perfil y vouala se repite el ciclo pero esta vez sin el post q qeria borrar...

Etiquetas: reemplazo
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 12:15.