Foros del Web » Programando para Internet » PHP »

Al leer con fgetss evitar los saltos de linea.

Estas en el tema de Al leer con fgetss evitar los saltos de linea. en el foro de PHP en Foros del Web. Hace poco pregunte algo sobre extraer partes de una cadena. Se me recomendó la función preg_match_all combinada con expresiones regulares. Es sin duda una expresión ...
  #1 (permalink)  
Antiguo 30/10/2005, 10:40
Avatar de Miguel001  
Fecha de Ingreso: marzo-2005
Ubicación: España
Mensajes: 49
Antigüedad: 19 años, 8 meses
Puntos: 0
Al leer con fgetss evitar los saltos de linea.

Hace poco pregunte algo sobre extraer partes de una cadena.
Se me recomendó la función preg_match_all combinada con expresiones regulares. Es sin duda una expresión muy interesante y que, efectivamente, extrae la porción de cadena que quieres.

Bien, a mi me interesa extraer los links de ciertas paginas webs. Lo consigo fácilmente así:
<?
$url="http://www. http://www.forosdelweb.com"; //Obviamente es un ejemplo.
//Abrimos el fichero en modo lectura
$DescriptorFichero = fopen($url,"r");
while(@!feof($DescriptorFichero)){
@$buffer = fgetss($DescriptorFichero,4096,'<a>');
echo $buffer.’<br>’;
}
¿>

De esta manera exclusivamente se filtran los enlaces.
A la vez se introducen en la base de datos y se eliminan los espacios en blanco, de tal manera que finalmente solo quedan almacenados los links.

Mi problema es que al leer el archivo línea a línea con fgetss, hay algunos enlaces que quedan partidos por un salto de línea.
Por ejemplo:

Línea 1: <a href=”blabla/blabla.html”>Grandes lluvias en las montañas que superan los
Línea 2: 1000 metros de altura en la estación otoñal</a>

De forma que una vez introducidos en la base de datos, en un registro aparece la línea 1 y en el siguiente la línea 2 con lo que es imposible extraerlo en condiciones tras una búsqueda.

¿Hay alguna función que evite estos saltos de línea en los códigos fuente de las páginas?
De forma que cuando se pueda convertir en una sola línea:
Línea 1: <a href=”blabla/blabla.html”>Grandes lluvias en las montañas que superan los 1000 metros de altura en la estación otoñal</a>


Cómo siempre gracias por el interes.
  #2 (permalink)  
Antiguo 30/10/2005, 11:11
 
Fecha de Ingreso: agosto-2004
Mensajes: 95
Antigüedad: 20 años, 2 meses
Puntos: 2
te recomiendo que lo hagas de esta forma ..


Código PHP:
<?
$url
="http://www.forosdelweb.com";

$contenido file_get_contents($url) ;
$links buscar_link($contenido);

function 
buscar_link($string){
    
$patron "/(<a href=\")(.+?)(\")(\s*)(>)(.+?)(<\/a>)/sie";
    
preg_match_all($patron$string$matches);
    return 
$matches[0];
}

echo 
"<pre>";
print_r($links);
echo 
"</pre>";

?>
este ejemplo te devuelve lo siguiente

Código HTML:
<pre>Array
(
    [0] => <a href="index.php?"><img src="/images/vbulletin3_logo_fdw.gif" border="0" alt="Foros del Web es una comunidad de ayuda al webmaster hispano" width="207" height="108" /></a>
    [1] => <a href="http://www.maestrosdelweb.com/" target="_blank" title="Visitar el sitio de Maestros del Web">Maestros del Web</a>
    [2] => <a href="http://www.faqsdelweb.com/" target="_blank" title="Visitar el sitio de Faqs del Web">Faqs del Web</a>
    [3] => <a href="http://www.desarrolloweb.com/" target="_blank" title="Visitar el sitio de Desarrollo Web">Desarrollo web</a>
    [4] => <a href="http://maestrosdelweb.mercadoprofesional.com/" target="_blank" title="Visitar el sitio de Desarrollo Web">Mercado Profesional</a>
    [5] => <a href="index.php?" accesskey="1"><img class="inlineimg" src="/images/misc/navbits_start.gif" alt="" border="0" /></a>
    [6] => <a href="register.php?" rel="nofollow">Registrarse</a>
    [7] => <a href="faq.php?" accesskey="5">FAQ</a>
)
</pre> 
solo mostre parte del array, ya que, son muchos elementos ...

esto complementa a lo que te respondi en

http://www.forosdelweb.com/f18/extraer-parte-exacta-cadena-con-etiquetas-344805/
__________________
Marco de Arica (Chile)
  #3 (permalink)  
Antiguo 30/10/2005, 11:33
Avatar de Miguel001  
Fecha de Ingreso: marzo-2005
Ubicación: España
Mensajes: 49
Antigüedad: 19 años, 8 meses
Puntos: 0
Ante todo, gracias por el interes.

Sin duda así son mas limpios los resultados, pero el problma que tengo con este sistema es el introducir cada enlace en un regisatro distinto en la base de datos.

De la manera que antes te dije, con un bucle cada enlace se introduce en un registro distinto. De esta manera no se exactamente como introducir los datos en la BD.
  #4 (permalink)  
Antiguo 30/10/2005, 11:56
 
Fecha de Ingreso: agosto-2004
Mensajes: 95
Antigüedad: 20 años, 2 meses
Puntos: 2
una vez que ya obtienes el array ..solo debes recorrerlo e insertar

Código PHP:
if (is_array($links))
{
    foreach (
$links as $valor){
    
   
/*
    Aquí realizas el Insert en tu Base de Datos;
    La variable $valor almacena el contenido de cada elemento del array, en este caso es el link que insertaras en la BD*/
    
  
}
 
 

__________________
Marco de Arica (Chile)
  #5 (permalink)  
Antiguo 30/10/2005, 12:02
Avatar de Miguel001  
Fecha de Ingreso: marzo-2005
Ubicación: España
Mensajes: 49
Antigüedad: 19 años, 8 meses
Puntos: 0
Genial.

Ahora si....

marcomartinez Agradezco enormente tu ayuda.

Gracias
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 22:13.