2011-09-19 24 views
9

Sto tentando di fare una galleria che chiama i nomi delle immagini da un database di file flat utilizzando la funzione PHP 'fgets. Ci sono diverse sezioni nella galleria, ognuna con la sua immagine predefinita e una piccola lista di immagini che gli utenti possono selezionare. Tutto funziona bene, ad eccezione di un pulsante.Come si elimina l'interruzione di riga dalla funzione fgets in PHP?

Ho un pulsante nella pagina che dovrebbe ripristinare tutte le gallerie per le loro immagini predefinite utilizzando Javascript Su clic. Funziona esattamente come voglio che, con un piccolo intoppo: Si copia l'interruzione di riga alla fine della linea allong con i personaggi sulla linea, rompendo il Javascript.

Il codice incriminato:

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); 
?> 

} 

Come uscite:

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

Come si può vedere, la virgoletta fine e il punto e virgola cade sulla riga successiva, e questo rompe il pulsante.

Con i file che sto usando ora, posso aggirare questo problema cambiando, "fgets ($ a)" a, "fgets ($ a, 7)" ma ho bisogno di averlo afferrare l'intera linea in modo tale che se il cliente decide di inserire un file con un nome più lungo, non interrompe la galleria su di essi.

+0

Dal momento che è una stringa, si sta solo cercando di rimuovere gli spazi bianchi (interruzione di riga) caratteri di una stringa. Molte risposte qui intorno per quello, immagino. –

risposta

17

La cosa migliore è quella di utilizzare la funzione php assetto(). Vedere http://php.net/manual/en/function.trim.php

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

Grazie, questo funziona. – Shreger

+0

@Shreger: fare clic sul segno di spunta. Più informazioni: [Come funziona l'accettazione di un lavoro di risposta?] (Http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) – webbiedave

+1

@Webbiedave: Mi dispiace, ho pensato Avevo. – Shreger

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

Non dovresti usare un'espressione regolare per questo. Usa 'str_replace()', sarà molto più veloce. Ma ancora meglio è usare 'rtrim()' – Ariel

+0

Funziona, grazie mille, ma la soluzione di Alex è più breve, quindi ho intenzione di usarlo. – Shreger

+0

Alex's è anche meglio =] –

19

Usa rtrim().

In particolare:

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

(. Per accaniti taglio altri personaggi, passano in un solo capo)

+2

Questa è la migliore risposta IMO – Populus

+2

Sì, quella attualmente accettata farà casino ... – Svish

+0

Se devi gestire file con record a lunghezza fissa e spazi finali, questa risposta è quella . La funzione fornita da @Alex Kennberg, anche se corretta per la domanda corrente, è stata esattamente la ragione di un errore che ho appena corretto. – Bizarro