Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Brak polskich znaków przy dopisywaniu do pliku ;(
Forum PHP.pl > Forum > PHP
artuross
Mam taki mały problem, nie wiem czemu się tak dzieje, ale, gdy zapisuję do pliku jakiś ciąg, dajmy na to "hasło", zapisuje się on dobrze, polskie znaki występują. Problem pojawia się, gdy postanowię dopisać jeszcze jeden ciąg "hasło" do pliku.
Każda polska litera zostaje zamieniona na krzaczek, nie tylko ta, która została dopisana, ale nawet te, które zostały zapisane do pliku wcześniej. I tak dzieje się za każdym razem - przy utworzeniu i zapisaniu czegoś do pliku, polskie znaki występują, przy dopisaniu - występują krzaczki.

Kiedyś robiłem skrypt o podobnej funkcjonalności, w każdym razie też dane były dopisywane, a polskie znaki występowały. Od tego czasu nic na komputerze nie zmieniałem, tj. nie zmieniałem wersji ani dystrybucji Windowsa.
Nie zmieniałem też wersji XAMPPa ani WAMPa, na obu próbowałem - ten sam efekt.

Pomyślałem, że być może to jakaś wada .txt, chociaż wiem, że poprzednio na .txt działałem, zmieniłem więc rozszerzenie pliku .rtf, a jeszcze później na .doc, niestety, nie pomogło.

Próbowałem też z trybem binarnym i bez - oczywiście, za każdą zmianą usuwałem plik z danymi.

W związku z tym, będę wdzięczny za wszelką pomoc i radę - przy czym polskie znaki muszą zostać.

Pozdrawiam
cudny
Ej, ale jakto zapisujesz do pliku ?
file_put_content() czy fwrite() ?
Skąd pobierasz dane ? Z formularza czy innego pliku ?
Czy ty aby na pewno piszesz o sprawach programowych ?
artuross
1. No cóż, skoro dopisuję to pewnie używam fwrite()
2. Pobieram ze strony, z tej samej strony pobierałem już kiedyś i było OK.
3. Ciężko stwierdzić, ale skoro przy zapisywaniu po raz 1. do pliku jest to zapisywane poprawnie, a dopiero przy dopisywaniu pojawia się problem, to myślę, że tak, jest to "sprawa programowa".
CuteOne
- podczas dopisywania stringu używasz tego samego pliku(skryptu), który tworzył początkowy .txt ?
- zobacz do Przedszkole->podczepione->polskie znaki
artuross
1. Tak, jest to ten sam skrypt, ta sama funkcja. Od razu używam dopisywania (ab).
2. W temacie co prawda przewijają się takie problemy, ale dotyczą one bazy danych MySQL, a nie plików tekstowych.
CuteOne
zrób test

  1. header('Content-type: text/html; charset=utf-8'); //w razie konieczności zmień na odpowiednie kodowanie
  2.  
  3. function insert($fname, $str) {
  4.  
  5. if(!file_exists($fname)) {
  6.  
  7. file_put_contents($str, $fname);
  8. }
  9. else {
  10. $content = file_get_contents($fname);
  11. file_put_contents($content.$str, $fname);
  12. }
  13.  
  14. return file_get_contents($fname);
  15. }
  16.  
  17. $fname = 'd:/plik.txt';
  18.  
  19. $str = file_get_contents('http://www.wp.pl');
  20. echo insert($fname, $str);


I zobacz czy wywali krzaki - pamiętaj o zmianie kodowania pliku na taki sam jak w header()
artuross
Tak, działa, ale dopiero po zamianie zmiennych, najpierw nazwa, później treść tongue.gif
Zaraz sprawdzę czy to za sprawą header() czy też samo file_put_content ma takie działanie.

EDIT: Nie, w mojej wersji skryptu to nie działa, nadal pojawiają się niechciane krzaczki i chyba pojawiają się tam jakieś znaki, które burzą szyk, próba z usuwaniem wszystkich innych znaków spoza 'klawiaturowych'.

EDIT 2: Wiem przynajmniej, że wyszukiwanie przy pomocy preg_match wszystkich znaków spoza klawiatury od razu wyrzuca krzaczki smile.gif
cudny
W takim wypadku pewnie zaiteresuje cie coś takiego:

http://php.net/manual/en/function.mb-convert-encoding.php
artuross
To podziałało, bardzo dziękuję za pomoc, pozdrawiam.
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.