Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] remplazar string en variable

Estas en el tema de remplazar string en variable en el foro de PHP en Foros del Web. Necesito ayuda, ya que no entiendo por que está sucediendo esto. Estoy intentando reemplazar un versículo bíblico que se encuentra dentro de una variable con ...
  #1 (permalink)  
Antiguo 18/02/2017, 01:20
Avatar de blogger  
Fecha de Ingreso: diciembre-2005
Ubicación: frente al monitor
Mensajes: 398
Antigüedad: 18 años, 7 meses
Puntos: 12
remplazar string en variable

Necesito ayuda, ya que no entiendo por que está sucediendo esto.

Estoy intentando reemplazar un versículo bíblico que se encuentra dentro de una variable con mucho texto, por un enlace hacía un buscador.

Bien, uso el siguiente código... es un ejemplo:

Código PHP:
$patron 'Genesis 3:18';
$quest '<a href="http://exegesis-biblica.com/search.php?search='.$patron.'">'.$patron.'</a>';
$articulo =  str_replace($patron$quest$articulo); 
La cuestión es que el último dígito se queda fuera del reemplazo, y en lugar de tener un enlace con Genesis 3:18, obtengo un enlace con Genesis 3:1, dejando fuera el 8, pero el texto del enlace sí está completo.

¿Alguien me puede decir que estoy haciendo mal?
__________________
http://exegesis-biblica.com/
  #2 (permalink)  
Antiguo 18/02/2017, 02:00
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 10 años
Puntos: 30
Respuesta: remplazar string en variable

Yo lo probé tal cual lo comparte y está funcionando bien.
  #3 (permalink)  
Antiguo 18/02/2017, 10:06
Avatar de blogger  
Fecha de Ingreso: diciembre-2005
Ubicación: frente al monitor
Mensajes: 398
Antigüedad: 18 años, 7 meses
Puntos: 12
Respuesta: remplazar string en variable

Cita:
Iniciado por Triby2 Ver Mensaje
Yo lo probé tal cual lo comparte y está funcionando bien.
Si lo pruebo tal cual a mi también me funciona.

Pero si revisa en mi pagina, http://exegesis-biblica.com/g-nesis-cap-tulo-1.html notará lo que mencionó.

No sé si tenga que ver con el hecho de qué el patrón sale de un array, y lo defino mediante un bucle. La cuestión es que al hacer un ECHO en la variable $quest durante el bucle, el resultado es el esperado, me da los enlaces completos; pero al hacer str_replace() es cuando ocurre el problema y no hace bien el reemplazo.
__________________
http://exegesis-biblica.com/

Última edición por blogger; 18/02/2017 a las 10:20
  #4 (permalink)  
Antiguo 18/02/2017, 10:26
Avatar de blogger  
Fecha de Ingreso: diciembre-2005
Ubicación: frente al monitor
Mensajes: 398
Antigüedad: 18 años, 7 meses
Puntos: 12
Respuesta: remplazar string en variable

He intentado el bucle de dos maneras.

Aquí les muestro las dos formas de hacer el bucle, el resultado es el mismo:

Código PHP:
$count=count($enlace);
$x 0;
WHILE (
$x <= $count) {
    
$match current($enlace);
    
$quest '<a href="http://exegesis-biblica.com/search.php?search='.$match.'">'.$match.'</a>';
    
$articulo =  str_replace($match$quest$articulo);
    
next($enlace);
    
$x++;

Código PHP:
foreach ($enlace as $valor) {
    
$quest '<a href="http://exegesis-biblica.com/search.php?search='.$valor.'">'.$valor.'</a>';
    
$articulo =  str_replace($valor$quest$articulo);

¿Qué estoy haciendo mal o porqué no quiere funcionar?
__________________
http://exegesis-biblica.com/
  #5 (permalink)  
Antiguo 18/02/2017, 11:38
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 11 meses
Puntos: 2237
Respuesta: remplazar string en variable

Recorre el array de enlaces en forma inversa (de mayor a menor), porque al reemplazar Génesis 1:1 aplica para 1:10 hasta 1:19, quedando el último dígito fuera del enlace.
__________________
- León, Guanajuato
- GV-Foto
  #6 (permalink)  
Antiguo 18/02/2017, 11:47
Avatar de blogger  
Fecha de Ingreso: diciembre-2005
Ubicación: frente al monitor
Mensajes: 398
Antigüedad: 18 años, 7 meses
Puntos: 12
Respuesta: remplazar string en variable

Cita:
Iniciado por Triby Ver Mensaje
Recorre el array de enlaces en forma inversa (de mayor a menor), porque al reemplazar Génesis 1:1 aplica para 1:10 hasta 1:19, quedando el último dígito fuera del enlace.
Intente poniendo $enlace = array_reverse($enlace); , pero se me desordenan los enlaces el resultado es:

Enlace: <a href="http://exegesis-biblica.com/search.php?search=<a href="http://exegesis-biblica.com/search.php?search=Genesis 1:3">Genesis 1:3</a>1"><a href="http://exegesis-biblica.com/search.php?search=Genesis 1:3">Genesis 1:3</a>1</a>
Texto del Enlace: Genesis 1:31">Genesis 1:31
__________________
http://exegesis-biblica.com/
  #7 (permalink)  
Antiguo 18/02/2017, 12:27
Avatar de blogger  
Fecha de Ingreso: diciembre-2005
Ubicación: frente al monitor
Mensajes: 398
Antigüedad: 18 años, 7 meses
Puntos: 12
Respuesta: remplazar string en variable

Cita:
Iniciado por Triby Ver Mensaje
Recorre el array de enlaces en forma inversa (de mayor a menor), porque al reemplazar Génesis 1:1 aplica para 1:10 hasta 1:19, quedando el último dígito fuera del enlace.
Gracias, me diste la idea para solucionarlo.

Lo que hice fue lo siguiente:

1 Recorrí el array a la inversa con el método mencionado previamente
2 Reemplace los enlaces con una secuencia unica
3 Reemplace la secuencia con el texto original y el enlace

Lo que pasaba es que el código estaba consideraba que Genesis 1:3 y Genesis 1:30 eran lo mismo, y se cortaba al llegar a 3, con una secuencia única se pueden diferenciar los versículos.

No sé si me explique bien, pero así fue como lo solucione.
__________________
http://exegesis-biblica.com/
  #8 (permalink)  
Antiguo 18/02/2017, 17:02
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 11 meses
Puntos: 2237
Respuesta: remplazar string en variable

Era tan sencillo como:

Código PHP:
Ver original
  1. for($i = count($enlaces) - 1; $i >= 0; $i--) {
  2.     // Reemplazar aquí
  3. }
__________________
- León, Guanajuato
- GV-Foto

Etiquetas: str_replace
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 06:08.