2011-09-19 5 views
9

Próbuję utworzyć galerię, która wywołuje nazwy obrazów z płaskiej bazy danych plików przy użyciu funkcji PHP "fgets". W galerii znajdują się różne sekcje, każda z własnym domyślnym obrazem oraz niewielka lista obrazów, które użytkownicy mogą wybierać. Wszystko działa dobrze, z wyjątkiem jednego przycisku.Jak wyeliminować podział wiersza z funkcji fgets w PHP?

Mam jeden przycisk na stronie, który ma zresetować wszystkie galerie do ich domyślnych obrazów przy użyciu Javascript OnClick. Działa dokładnie tak, jak chcę, z jednym małym zaczepem: kopiuje przerwę linii na końcu linii wraz ze znakami na linii, łamiąc JavaScript.

Kod wykraczająca:

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

} 

Jak wyprowadza:

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

Jak widać, kończący znak cudzysłowu i średnik przypada w następnym wierszu, a to łamie przycisk.

Z plikami, których teraz używam, mogę obejść ten problem, zmieniając "fgets ($ a)" na "fgets ($ a, 7)", ale potrzebuję go pobrać całą linię tak, że jeśli klient zdecyduje się na wprowadzenie pliku o dłuższej nazwie, nie spowoduje to zerwania galerii na nich.

+0

Ponieważ jest to ciąg, jesteś po prostu staramy się usunąć spacje (linebreak) znaków w ciąg. Miałem tu na myśli wiele odpowiedzi. –

Odpowiedz

17

Najlepiej jest użyć funkcji php trim(). Zobacz http://php.net/manual/en/function.trim.php

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

Dziękuję, to działa. – Shreger

+0

@Shreger: Kliknij znacznik wyboru. Więcej informacji: [Jak działa akceptacja odpowiedzi?] (Http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) – webbiedave

+1

@Webbiedave: Przykro mi, myślałem Miałem. – Shreger

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

Nie należy używać do tego celu wyrażenia regularnego. Użyj 'str_replace()', będzie to znacznie szybsze. Ale jeszcze lepiej jest użyć 'rtrim()' – Ariel

+0

Działa to, dziękuję bardzo, ale rozwiązanie Alexa jest krótsze, więc zamierzam go użyć. – Shreger

+0

Również Alex's jest lepszy =] –

19

Korzystając rtrim().

Konkretnie:

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

(. Aby zapalonych przycinanie innych znaków, przechodzą tylko w nowej linii)

+2

To jest IMO lepsza odpowiedź – Populus

+2

Tak, aktualnie zaakceptowana będzie bałaganiarstwo ... – Svish

+0

Jeśli musisz obsługiwać pliki z zapisami o stałej długości i spacji, ta odpowiedź jest jedyna . Funkcja dostarczona przez @Alex Kennberg, mimo że poprawna dla bieżącego pytania, była dokładnie przyczyną błędu, który właśnie naprawiłem. – Bizarro