artuross
11.10.2012, 17:31:45
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
11.10.2012, 17:54:56
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
11.10.2012, 18:03:31
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
11.10.2012, 18:17:22
- podczas dopisywania stringu używasz tego samego pliku(skryptu), który tworzył początkowy .txt ?
- zobacz do Przedszkole->podczepione->polskie znaki
artuross
11.10.2012, 18:27:11
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
11.10.2012, 18:34:57
zrób test
header('Content-type: text/html; charset=utf-8'); //w razie konieczności zmień na odpowiednie kodowanie
function insert($fname, $str) {
file_put_contents($str, $fname);
}
else {
file_put_contents($content.$str, $fname);
}
}
$fname = 'd:/plik.txt';
echo insert
($fname, $str);
I zobacz czy wywali krzaki - pamiętaj o zmianie kodowania pliku na taki sam jak w header()
artuross
11.10.2012, 18:47:28
Tak, działa, ale dopiero po zamianie zmiennych, najpierw nazwa, później treść

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
cudny
11.10.2012, 23:00:23
artuross
13.10.2012, 10:15:39
To podziałało, bardzo dziękuję za pomoc, pozdrawiam.