Foros del Web » Programando para Internet » PHP »

tratar codigo html

Estas en el tema de tratar codigo html en el foro de PHP en Foros del Web. Tengo todo el codigo obtenido desde una pagina web, que sigue el patron: Código: <tr> <td>dato1</td> <td>dato 2</td> <td>dato 3</td> <td>dato 4</td> </tr> como puedo ...
  #1 (permalink)  
Antiguo 21/07/2008, 01:53
Avatar de TCL_ZIP  
Fecha de Ingreso: noviembre-2003
Ubicación: Esporles, Mallorca, España
Mensajes: 690
Antigüedad: 20 años, 5 meses
Puntos: 4
tratar codigo html

Tengo todo el codigo obtenido desde una pagina web, que sigue el patron:
Código:
<tr>
<td>dato1</td>
<td>dato 2</td>
<td>dato 3</td> 
<td>dato 4</td>
</tr>
como puedo obetener esos datos? creo que es con la funcion sscanf, pero no hay manera de que me los saque, no lo consigo, alguna idea?
  #2 (permalink)  
Antiguo 21/07/2008, 02:42
Avatar de aloqui  
Fecha de Ingreso: diciembre-2007
Mensajes: 973
Antigüedad: 16 años, 4 meses
Puntos: 24
Respuesta: tratar codigo html

Yo creo que es mejor usando expresiones regulares.
Ejemplo (suponiendo que no hay fines de linea):
/<tr><td>(.*)</td><td>(.*)</td><td>(.*)</td><td>(.*)</td></tr>/
__________________
Grupos de Música
Pop Music Stars
  #3 (permalink)  
Antiguo 21/07/2008, 02:43
Avatar de TCL_ZIP  
Fecha de Ingreso: noviembre-2003
Ubicación: Esporles, Mallorca, España
Mensajes: 690
Antigüedad: 20 años, 5 meses
Puntos: 4
Respuesta: tratar codigo html

el problema es que si hay fines de linea, los cambios de linea estan igual como te los he puesto yo, y esa expr regular con que la utilizas?
con preg_match? con sscanf?
  #4 (permalink)  
Antiguo 21/07/2008, 02:59
Avatar de aloqui  
Fecha de Ingreso: diciembre-2007
Mensajes: 973
Antigüedad: 16 años, 4 meses
Puntos: 24
Respuesta: tratar codigo html

La funcion de PHP a utilizar sería ereg o eregi

En cuanto a los fines de linea, en PERL se hace añadiendo el modificador "m" a la expresión regular, creo que en PHP se hace igual aunque yo no lo he utilizado: http://es2.php.net/manual/en/referen....modifiers.php
__________________
Grupos de Música
Pop Music Stars

Última edición por aloqui; 21/07/2008 a las 03:05
  #5 (permalink)  
Antiguo 21/07/2008, 03:25
Avatar de TCL_ZIP  
Fecha de Ingreso: noviembre-2003
Ubicación: Esporles, Mallorca, España
Mensajes: 690
Antigüedad: 20 años, 5 meses
Puntos: 4
Respuesta: tratar codigo html

no hay manera :S srry soy novato, he echo el siguiente codigo:

$ranking = file_get_contents("http://cp.futur0.com/db/ranking_jobs.php?job=4005"); //obtenemos el listado de ranking
ereg("/<tr>/m<td>(.*)</td>/m<td>(.*)</td>/m<td>(.*)</td>/m<td>(.*)</td></tr>/",$ranking,$registros);
echo $registros[0].$registros[1].$registros[2].$registros[3].$registros[4];

y siempre me devuelve vacio :S
  #6 (permalink)  
Antiguo 21/07/2008, 03:33
Avatar de aloqui  
Fecha de Ingreso: diciembre-2007
Mensajes: 973
Antigüedad: 16 años, 4 meses
Puntos: 24
Respuesta: tratar codigo html

Ahora no puedo probarlo, pero de momento veo que tienes mal la expresión regular. El modificador "m" va únicamente al final. Prueba con:
"/<tr><td>(.*)<\/td><td>(.*)<\/td><td>(.*)<\/td><td>(.*)<\/td><\/tr>/m"
__________________
Grupos de Música
Pop Music Stars
  #7 (permalink)  
Antiguo 21/07/2008, 03:36
Avatar de TCL_ZIP  
Fecha de Ingreso: noviembre-2003
Ubicación: Esporles, Mallorca, España
Mensajes: 690
Antigüedad: 20 años, 5 meses
Puntos: 4
Respuesta: tratar codigo html

sigue sin funcionar... pero de todas maneras no termino de entender el porque solo al final? el cambio de linea se realiza al final de los <tr> y al final de los <\td> si lo pones después del patron le aplicas alg parecido al, ignorar los saltos de linea?
  #8 (permalink)  
Antiguo 21/07/2008, 04:12
Avatar de TCL_ZIP  
Fecha de Ingreso: noviembre-2003
Ubicación: Esporles, Mallorca, España
Mensajes: 690
Antigüedad: 20 años, 5 meses
Puntos: 4
Respuesta: tratar codigo html

Al final buscando a través de internet he encontrado una parte de codigo que me sirve, y me funciona, era simplemente:
Asi que he creado el siguiente script:
Código PHP:
$ranking file_get_contents("http://cp.futur0.com/db/ranking_jobs.php?job=4005"); //obtenemos el listado de ranking
eregi("<tr>[ \t\n\r\m]*<td>(.*)</td>[ \t\n\r\m]*<td><img align=absmiddle height=20 width=20 src=\"http://server.futur0.com/futur0/obtenerlogo.php?gdid=(.*)&eb=(.*)\">(.*)</td>[ \t\n\r\m]*<td>(.*)</td>[ \t\n\r\m]*<td>(.*)</td>[ \t\n\r\m]*</tr>",$ranking,$registros);

echo 
$registros[0]; 

el problema que tengo ahora? creo que es el tema de obtener los datos de ese link, que con el doble entrecomillado en src, no me lo coje o algo asi, (sin esa linea me funciona)

haver si alguien me podria echar una mano ^^
  #9 (permalink)  
Antiguo 21/07/2008, 10:31
Avatar de aloqui  
Fecha de Ingreso: diciembre-2007
Mensajes: 973
Antigüedad: 16 años, 4 meses
Puntos: 24
Respuesta: tratar codigo html

El modificador a usar para la opcion multiline era el "s" y no el "m" que te habia indicado.
Y para que lo tome, en lugar de la funcion ereg debes usar la funcion preg_match.

Ejemplo.
Con:
Código:
<?php
$ranking = file_get_contents("http://cp.futur0.com/db/ranking_jobs.php?job=4005"); //obtenemos el listado de ranking
$regExp = '/<tr>.*?<td.*?>(.*?)<\/td>.*?<td.*?>(.*?)<\/td>.*?<td.*?>(.*?)<\/td>.*?<td.*?>(.*?)<\/td>/s';
preg_match( $regExp, $ranking, $matches );
print_r($matches);
?>
Obtendrás el resultado siguiente:

Código:
Array
(
    [0] => <tr>
<td width=10><b>#</b></td>
<td><b>Personaje</b></td>
<td><b>Clase</b></td>
<td><b>Nivel</b></td>
    [1] => <b>#</b>
    [2] => <b>Personaje</b>
    [3] => <b>Clase</b>
    [4] => <b>Nivel</b>
)
__________________
Grupos de Música
Pop Music Stars
  #10 (permalink)  
Antiguo 21/07/2008, 21:24
Avatar de TCL_ZIP  
Fecha de Ingreso: noviembre-2003
Ubicación: Esporles, Mallorca, España
Mensajes: 690
Antigüedad: 20 años, 5 meses
Puntos: 4
Respuesta: tratar codigo html

y para meter el source de la imagen? tal y como te he puesto en el post numero 8?
  #11 (permalink)  
Antiguo 31/07/2008, 02:53
Avatar de TCL_ZIP  
Fecha de Ingreso: noviembre-2003
Ubicación: Esporles, Mallorca, España
Mensajes: 690
Antigüedad: 20 años, 5 meses
Puntos: 4
Respuesta: tratar codigo html

he estado provando tu codigo pero solamente me recibe la primera fila (la cabecera) como podria hacer para que me leyera todas?
  #12 (permalink)  
Antiguo 31/07/2008, 05:52
Avatar de aloqui  
Fecha de Ingreso: diciembre-2007
Mensajes: 973
Antigüedad: 16 años, 4 meses
Puntos: 24
Respuesta: tratar codigo html

Para que te lea todo lo que cumpla esa expresion regular debes utilizar preg_match_all en lugar de preg_match.

Si la fila que quieres leer tiene alguna caracteristica especial (o se la puedes poner) que no tienen las otras, entonces puedes modificar la expresion regular incluyendo dicha característica: "img align=absmiddle", o lo que sea.
__________________
Grupos de Música
Pop Music Stars
  #13 (permalink)  
Antiguo 01/08/2008, 07:41
Avatar de TCL_ZIP  
Fecha de Ingreso: noviembre-2003
Ubicación: Esporles, Mallorca, España
Mensajes: 690
Antigüedad: 20 años, 5 meses
Puntos: 4
Respuesta: tratar codigo html

ok, ahora lo unico que me falla, es que se me para de leer cuando encuentra espacios.. eso porque puede ser?
  #14 (permalink)  
Antiguo 03/08/2008, 05:17
Avatar de TCL_ZIP  
Fecha de Ingreso: noviembre-2003
Ubicación: Esporles, Mallorca, España
Mensajes: 690
Antigüedad: 20 años, 5 meses
Puntos: 4
Respuesta: tratar codigo html

nadie sabe? especifico un poco mas por si alguien puede ayudarme... el codigo que uso es el siguiente:
Código PHP:
    for ( $i $i <= 100 $i ++) {
        
        
$regExp "/<tr>.*?<td.*?>".$i.".<\/td>.*?<td.*?>(.*?)<\/td>.*?<td.*?>(.*?)<\/td>.*?<td.*?>(.*?)<\/td>/s";
        
preg_match$regExp$ranking$matches );
        
$logonombre explode (" ",$matches[1]);
        
$logotipoexplode("\"",$logonombre[4]);
        if(
$logonombre[5]==''){
        
        }else{
            
$sql="INSERT INTO userbar (logo, nombre,job,lvl) VALUES (\"".caracteresespeciales($logotipo[1])."\",\"".caracteresespeciales($logonombre[5])."\",\"".caracteresespeciales($matches[2])."\",\"".caracteresespeciales($matches[3])."\");\n ";
            
mysql_select_db($database_userbar$userbar);
            
$query_borrar $sql;
            
$borrar mysql_query($query_borrar$userbar) or die(mysql_error());
        }
    } 
el problema es que en el segundo td, siempre hay este tipo de información:

Cita:
<img align=absmiddle height=20 width=20 src="http://server.futur0.com/futur0/obtenerlogo.php?gdid=4191&eb=16"> Flipimongui
el problema es que todo el contenido de la imagen me lo coje bien, pero en donde pone flipimongui, si es una frase como por ejemplo "Flipi Mongui" solamente captura el "Flipi" porque puede ser?
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:55.