Foros del Web » Programando para Internet » PHP »

Capturar en código HTML usando PHP un string entre dos strings

Estas en el tema de Capturar en código HTML usando PHP un string entre dos strings en el foro de PHP en Foros del Web. Necesito capturar palabras de un código fuente html. El código lo paso en un textarea y lo almaceno en una variable. Hasta ahí bien... y ...
  #1 (permalink)  
Antiguo 28/07/2012, 06:39
 
Fecha de Ingreso: noviembre-2011
Ubicación: Madrid
Mensajes: 15
Antigüedad: 13 años
Puntos: 1
Capturar en código HTML usando PHP un string entre dos strings

Necesito capturar palabras de un código fuente html.

El código lo paso en un textarea y lo almaceno en una variable. Hasta ahí bien... y lo que necesito capturar está entre 2 strings. Por ejemplo

Necesito capturar lo que está en negrita:

http://tc5.travian.net/karte.php?d=342407&c=84

He probado con:

Código:
preg_match('/karte.php?d=([\w|\W]+)&c=84/', $decode, $result);
Pero esto no me funciona por el uso de carácteres especiales que son los que he coloreado de rojo. ¿Como podría solucionar esto? ¿O existe una manera más facil y me estoy complicando la vida?

PD: Podría capturarlo por líneas y usando LEFT y RIGHT, pero no siempre coincide el número de lineas, necesito hacer una búsqueda entre caracteres o algo así.
  #2 (permalink)  
Antiguo 28/07/2012, 07:08
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 13 años, 5 meses
Puntos: 181
Respuesta: Capturar en código HTML usando PHP un string entre dos strings

Has intentado escapar los caracteres especiales con el simbolo \ ? No lo he probado pero de esta manera es posible que si reconozca bien la expresión regular.
__________________
Blog de humor http://elcuasatar.net63.net/
  #3 (permalink)  
Antiguo 28/07/2012, 08:18
 
Fecha de Ingreso: noviembre-2011
Ubicación: Madrid
Mensajes: 15
Antigüedad: 13 años
Puntos: 1
Respuesta: Capturar en código HTML usando PHP un string entre dos strings

Gracias! Aunque no me funciona en todos los caracteres.

Lo acabo de poner de esta manera:

Código:
preg_match('/karte.php\?d\=([\w|\W]+)\&c\=ee/', $decode, $result);
Me lee todos menos el ampersand &.

Sin él me saca 248693& . ¿Como puedo hacer para incluir en la búsqueda el & y me pille solo el número?. Es raro que me sea válido para las interrogaciones y el signo igual pero con éste no cuela... ¿Alguna solución?

Gracias de antemano :)
  #4 (permalink)  
Antiguo 28/07/2012, 11:35
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 13 años, 5 meses
Puntos: 181
Respuesta: Capturar en código HTML usando PHP un string entre dos strings

Bueno se me ocurren algunas ideas, es cuestion de que las pruebes y seguro alguna te funcionara. Insisto en que ninguna la he probado pero basandome en mi experiencia alguna o la mezcla de algunas daria con la solución:

Una solucion es que en vez de pasar \& lo intentes como [&]

Otra forma seria pasar el enlace por la función htmlspecialchars o htmlentities (prueba a ver con cual te puede funcionar) para que te convierta el & en & y de esta manera en lugar de escapar un \& seria colocar algo como [&]

Si no te sirven ninguna de estas dos funciones (a mi siempre me dan una lata) pues usa igual un str_replace para convertir el & por el &

Por ultimo una chapuza un poco cutre pero que podria funcionar seria usar substr para tomar todos los caracteres de la expresion regular pero le restas el ultimo caracter, es decir que empieza desde cero y termina en la longitud de la cadena que salio-1 (o puede que sea mas porque creo que el ampersand lo toma como si fuera dos caracteres, ya seria cosa de que lo probaras).

Pues bueno, ya es cuestión de prueba y acierto. Si encuentras la solución no dejes de publicarla para que todos aprendamos.
__________________
Blog de humor http://elcuasatar.net63.net/

Última edición por cuasatar; 28/07/2012 a las 11:41
  #5 (permalink)  
Antiguo 28/07/2012, 11:41
 
Fecha de Ingreso: noviembre-2011
Ubicación: Madrid
Mensajes: 15
Antigüedad: 13 años
Puntos: 1
Respuesta: Capturar en código HTML usando PHP un string entre dos strings

Gracias! al final encontré otra solución parecida a la chapucera que me dijiste xD

Código:
preg_match('/karte.php\?d\=([\w|\W]+)c\=ee/', $texto, $result);
$result[1] = trim($result[1], '&');
Con esto ya puedo pasar el número al mysql. Solo tengo un último problema y me parece que esto es algo más difícil... quizás abra un nuevo foro para esto.

Con el anterior código consigo solo capturar el primer preg_match del código. Necesitaría capturar por separado todos las cadenas a buscar. Lo malo que al poner que empiece por esa cadena y termine por la última, me captura todo el texto que hay de por medio. Lo que necesito es algo que me capture linea por linea e ir desechando hasta recorrer todo y capturar solo las cadenas que busqué.
  #6 (permalink)  
Antiguo 28/07/2012, 11:58
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 13 años, 5 meses
Puntos: 181
Respuesta: Capturar en código HTML usando PHP un string entre dos strings

Para encontrar todas las coincidencias en el texto usa preg_match_all

http://php.net/manual/es/function.preg-match-all.php

Lee bien el manual que no es dificil de usar pero tiene su truco.

p.s. Yo trataria de quitar el ampersand sin la chapuza porque al tener que usar un array en preg_match_all te tocaria hacer lo mismo con todos los elementos del arreglo y es una solución un poco "sucia" computacionalmente hablando.
__________________
Blog de humor http://elcuasatar.net63.net/

Última edición por cuasatar; 28/07/2012 a las 12:09
  #7 (permalink)  
Antiguo 28/07/2012, 12:10
 
Fecha de Ingreso: noviembre-2011
Ubicación: Madrid
Mensajes: 15
Antigüedad: 13 años
Puntos: 1
Respuesta: Capturar en código HTML usando PHP un string entre dos strings

Ok, gracias. Repasaré todo el manual. El problema con el _all (que ya lo probé) lo tenía cuando intentaba usar el [\w|\W] en el preg_match_all, pero bueno, no iba a pretender que funcionase por arte de magia, tendré que empollarmelo :D.

Un saludo y thanks!

Etiquetas: html, string, strings, variables
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 02:13.