2011-09-19 15 views
9

Estoy intentando crear una galería que llame a los nombres de las imágenes desde una base de datos de archivos planos usando la función 'fgets' de PHP. Hay diferentes secciones en la galería, cada una con su propia imagen predeterminada y una pequeña lista de imágenes que los usuarios pueden seleccionar. Todo funciona bien, excepto por un botón.¿Cómo elimino el salto de línea de la función fgets en PHP?

Tengo un botón en la página que se supone que restablece todas las galerías a sus imágenes predeterminadas mediante Javascript OnClick. Funciona exactamente como yo quiero, con un pequeño problema: copia el salto de línea al final de la línea junto con los caracteres en la línea, rompiendo el Javascript.

El código erróneo:

function back(){ 
document.getElementById('back').className='back'; 
document.getElementById('one').className='cellcont'; 

//This should output the proper javascript, but does not 
<?php 
$a = fopen('c.txt','r'); 
if (!$a) {echo 'ERROR: Unable to open file.'; exit;} 
$b = fgets($a); 
echo "document.getElementById('i1').src='$b';"; 
fclose($a); 
?> 

} 

¿Cómo se da salida:

function back(){ 
document.getElementById('back').className='back'; 
document.getElementById('one').className='cellcont'; 
document.getElementById('i1').src='00.jpg 
';} 

Como se puede ver, la comilla final y el punto y coma cae en la línea siguiente, y esto rompe el botón.

Con los archivos que estoy usando ahora, puedo solucionar este problema cambiando "fgets ($ a)" a "fgets ($ a, 7)" pero necesito que agarre toda la línea de modo que si el cliente decide ingresar un archivo con un nombre más largo, no rompe la galería en ellos.

+0

Ya que es una cadena, que está tratando de eliminar los espacios en blanco (salto de línea) caracteres de una cadena. Aquí hay muchas respuestas para eso, me imagino. –

Respuesta

17

Su mejor opción es usar la función php trim(). Ver http://php.net/manual/en/function.trim.php

$b = trim(fgets($a)); 
+0

Gracias, esto funciona. – Shreger

+0

@Shreger: haga clic en la marca de verificación. Más información: [¿Cómo funciona la aceptación de una respuesta?] (Http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) – webbiedave

+1

@Webbiedave: Lo siento, pensé Tuve. – Shreger

2
$b = fgets($a); 
$b = preg_replace("/[\n|\r]/",'',$b); 
+1

No debe usar una expresión regular para esto. Use 'str_replace()', será mucho más rápido. Pero aún mejor es usar 'rtrim()' – Ariel

+0

Esto funciona, muchas gracias, pero la solución de Alex es más corta, así que voy a usarla. – Shreger

+0

Alex's es mejor así]] –

19

Uso rtrim().

Específicamente:

rtrim($var, "\r\n"); 

(. Para los ávidos de recorte otros personajes pasan, en tan solo salto de línea)

+2

Esta es la mejor respuesta de IMO – Populus

+2

Sí, la actualmente aceptada desordenará ... – Svish

+0

Si tiene que manejar archivos con registros de longitud fija y espacios finales, esta respuesta es la . La función proporcionada por @Alex Kennberg, aunque es correcta para la pregunta actual, fue exactamente la razón de un error que acabo de solucionar. – Bizarro