Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]String z pliku do funkcji
Forum PHP.pl > Forum > Przedszkole
mundeck
Odczytuję z pliku jeden wyraz, przekazuję go jako string do funkcji, ale funkcja nie daje poprawnego wyniku. Ale gdy ten sam string napiszę ręcznie w kodzie, funkcja działa. Wybór funkcji odczytującej (file_get_contents lub fgets) nie ma na to wpływu. Dlaczego tak się dzieje i co mogę z tym zrobić?


  1. //TO NIE DZIAŁA
  2. $slowo = file_get_contents('pliktekstowy.txt');
  3. $slowo2 = przeksztalc_slowo($slowo, 'dodatkowy_argument');
  4.  
  5.  
  6. //TO DZIAŁA
  7. $slowo = 'samochód';
  8. $slowo2 = przeksztalc_slowo($slowo, 'dodatkowy_argument');


Oczywiście sprawdzałem, że w każdym z obu przypadków w zmiennej $slowo kryje się 'samochód'.
golabow
Nie chce mi się wierzyć że w jednym i drugim przypadku zmienna $slowo ma taką samą wartość. Sprawdź jeszcze raz czy ścieżka do pliku jest dobra oraz jego uprawnienia.
mundeck
Oczywiście mówiąc "funkcja nie działa" mam na myśli to, że nie daje wyniku zgodnego z oczekiwaniami (co do tego jestem pewien).

Ścieżka do pliku jest dobra, bo inaczej w ogóle by nic nie odczytywało. A odczytuje z pliku, wiem, bo wyrzucałem stringi na ekran i porównywałem. Uprawnienia też chyba są poprawnie ustawione, skoro nie ma problemu z odczytem z pliku?



Pyton_000
  1. $slowo = trim($slowo);
by_ikar
Taa to co napisał @Pyton. Jak nie wiesz dlaczego coś nie działa, to printuj dane. var_dump twoim przyjacielem w każdej sytuacji.
mundeck
No dzięki za podpowiedzi, ale dalej nie działa :/

Wynik działania var_dump jest taki:

string(15) "?s#w#ż_a(6Qa"
string(12) "s#w#ż_a(6Qa"

Czytałem, że za pomocą odpowiedniej funkcji można "rozebrać" napisy, przedstawiając kody ASCII każdej z liter, no i wynik jest taki:

23 c5 83 c5 ba 51 78 52 5f 5e c5 ba 4e 51 73
73 23 77 23 c5 bc 5f 61 28 36 51 61

Użyłem mb_detect_encoding, ale w obu przypadkach wyświetla UTF-8. Użyłem też funkcji trim dla pierwszego stringa, ale nie ma różnicy

O co w takim razie może chodzić?
nospor
Ale po co rozbierac....

Przeciez
string(15) "s#w#ż_a(6Qa"
string(12) "s#w#ż_a(6Qa"

wyraznie widac, ze jeden ma 15 znakow a drugi tylko 12.... Wiec logiczne ze sie roznią.... Ten co ma 15 znakow, to ma pewnie jakies biale znaki. Musisz uzyc TRIM()
Pyton_000
a plik jest w UTF? Bez BOM ?
mundeck
TRIM(), jak pisałem, nic nie daje.

Dopiero teraz czytam, co to jest BOM wink.gif

Czy dobrym rozwiązaniem będzie utworzenie tego pliku za pomocą skryptu, zamiast wrzucanie na serwer pliku utworzonego w Notatniku?
nospor
Cytat
TRIM(), jak pisałem, nic nie daje.
Fucktycznie... na szybko pisalem odpowiedz. Moja wina.
Pyton_000
Możesz go zrobić czymś pokroju notepad++ czy inne które potrafią zapisać bez bom.
celbarowicz
Dlaczego 'to' działa? Jak był tworzony plik tekstowy?

  1. <?php
  2. //TO NIE DZIAŁA
  3. $slowo='samochód';
  4. file_put_contents('pliktekstowy.txt',$slowo);
  5. echo $slowo = file_get_contents('pliktekstowy.txt');
  6. echo '<br>';
  7. echo var_dump($slowo);
  8. echo '------------------';
  9. echo '<br>';
  10.  
  11. // $slowo2 = przeksztalc_slowo($slowo, 'dodatkowy_argument');
  12.  
  13.  
  14. //TO DZIAŁA
  15. echo $slowo = 'samochód';
  16. echo '<br>';
  17. echo var_dump($slowo);
  18. // $slowo2 = przeksztalc_slowo($slowo, 'dodatkowy_argument');
  19.  
  20. ?>
  21.  
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.