Brak polskich znaków w Firefoxie z pliku .txt

0

Witam.
Mam taki problem, że zapisuję (przez PHP) wypowiedzi z formularza w pliku .txt
Zdarzają się polskie znaki w wypowiedziach.
Niestety na firefoxie, po wczytaniu zawartości pliku .txt na stronę zamiast polskich znaków pojawiają się takie znaczki: �
Na chromie wszystko wyświetla się normalnie.
Jak sobie z tym poradzić ?

Z góry dziękuję i pozdrawiam :)

0

Chrome lepiej wybiera sobie kodowanie. Szukaj coś w stylu Widok-Kodowanie-[tutaj wybierz kodowanie w jakim zapisujesz plik]. Nie wiem gdzie to konkretnie, nie chce mi się też specjalnie FF odpalać.
A tak to wygląda w Operze: http://i.imgur.com/dvqUW.jpg - podobnie będzie w FF.

0

Nie nie nie... nie zrozumiałeś mnie ;)
To są standardowe ustawienia Firefoxa, to jest moja strona... I jak zrobić to na stronie (w kodzie) aby zwykły użytkownik Firefoxa widział polskie znaki :)
O takie coś mi chodzi

0

Uściślij gdzie zapisujesz (baza, plik txt)?
jeśli baza to ustaw kodowanie tabeli w bazie danych np na unicode.
i przy połaczeniu z bazą użyj:

	mysql_query("SET NAMES 'utf8' COLLATE 'utf8_unicode_ci'");  

i nie zapomnij o odpowiednim nagłówku w kodowanej stronie
[edit]
omg ślepy jestem .. pora juz nie ta :P
widze że w pliku txt wobec tego dodaj odpowiedni nagłówek na stronie np.
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

0

Mam ustawione iso-8859-2. Jak zmienie na UTF-8 to krzaczy mi wszystko.
Nie tylko zawartość pliku txt ale cały tekst na stronie :/

2

Boże, jakie tagi html w pliku txt? :/
@RudYg: W txt nie możesz zdefiniować kodowania (no może poza UTF-8 z BOM), możesz więc tylko liczyć na to, że przeglądarka to poprawnie rozpozna. Ew zostaje Ci podawanie pliku txt poprzez plik php i poprzez header podawać Content-Type jako text/plain; charset=kodowanie - możliwe, że pomoże, nie wiem.
Ew. jeżeli pliki txt zapisujesz w jednym folderze i ew. jego podfolderach - po prostu ustawić poprzez .htaccess domyślne kodowanie dla folderu: AddDefaultCharset kodowanie

Kodowania strony nie zmieniaj, bo to nie ma sensu - ale faktem jest, że zawsze i wszędzie powinieneś używać UTF-8, unikniesz wielu problemów w przyszłości.

Możesz też spróbować tylko tekst, który zapisujesz do pliku txt przekonwertować przy pomocy iconv do UTF-8 i tak go zapisać (ew. przy pomocy mb_convert_encoding, ale niestety nie wszystkie serwery mają włączone rozszerzenie mb_string). Tu masz jeszcze poradę jak dokleić do tego BOM potem.

0

Boże, jakie tagi html w pliku txt? :/

Nie no, ja osobiście mówiłem o tagach w pliku html przez który jest wyświetlany plik txt :)

podawanie pliku txt poprzez plik php i poprzez header podawać Content-Type jako text/plain; charset=kodowanie

Też nie działało

ustawić poprzez .htaccess domyślne kodowanie dla folderu: AddDefaultCharset kodowanie

No i to zaczęło śmigać :)

zawsze i wszędzie powinieneś używać UTF-8, unikniesz wielu problemów w przyszłości.

No właśnie gdzieś już kiedyś czytałem takie zdanie i próbowałem przestawiać się na to UTF-8 ale mi krzaczy polskie znaki na całej stronie na UTFie ...
Meta tagi ustawiam takie:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="pl" />

Może to wynika z kodowania samego programu... Hmmm może kiedyś popróbuję jeszcze z tym.
A jakich to niby problemów uniknę poprzez używanie utfa ?

Tak więc dzięki za pomoc :)

P.S. iconv i BOMu już nie próbowałem bo zaczęło działać przez .htaccess :)

1

Mi chodziło o wypowiedź @Piotrekdp.
Pliki html i txt są przecież niezależne, więc nie wiem po co dodawać do HTML tag z kodowaniem i liczyć, że w txt zadziała.
Wg tej idei wpisanie tagu w jednym pliku html powinno zmienić kodowanie w drugim o.O nonsens.

Jeżeli ustawianie kodowania w podany sposób przez php nie podziałało, to zawsze możesz w tym momencie podglądnąć nagłówki które serwer podaje po modyfikacji przez AddDefaultCharset i potem to powtórzyć w php. Ja nigdy nie przyglądałem się jak wyglądają nagłówki plików txt ze zmienionym kodowaniem. --- oczywiście to tylko dla dociekliwych (sam bym zajrzał, gdyby to był mój temat), bo jak działa podaną metodą to się martwić nie trzeba.

Oprócz ustawienia kodowania - sam plik także musi być zapisany w utf-8 :P Generalnie pliki mają swoje kodowanie, a tagiem tylko pomagasz rozpoznać, którego z nich używasz.

Jakich problemów - np. bez UTF-8 stworzenie strony obsługującej jednocześnie język niemiecki i rosyjski będzie utrudnione. W dodatku czasem jakieś biblioteki i podobne nie polubią się z określonymi kodowaniami - za to UTF-8 przyjmie w zasadzie każda (przykład: generowanie pdfów) - potem trzeba się bawić w iconv-em itd. W dodatku baza danych ma kodowanie osobno od strony - być może nawet w bazie używasz (o ile używasz) kodowania utf-8, być może nie. Ja jak szedłem do pierwszej roboty to tam też z uporem maniaka korzystali z ISO-8859-2, choć nie ma z tego żadnego pożytku. Ale bazy danych także były w tym. Potem import/eksport tego na różne serwery powodował problemy z polskimi znakami. Czasem krzaki, czasem kwadraty, czasem pytajniki - nie było reguły. Potem i tak przyszło robić stronę w 5 językach, więc się wkurzyłem i przerobiłem cały ich system na UTF-8 i od tego czasu programuje się dużo spokojniej ;)

edit: Sprawdziłem te nagłówki w pliku txt, musiałem ;)

array(9) {
  [0]=>
  string(15) "HTTP/1.1 200 OK"
  [1]=>
  string(35) "Date: Mon, 15 Oct 2012 19:00:14 GMT"
  [2]=>
  string(40) "Server: Apache/2.2.22 (Win32) PHP/5.3.14"
  [3]=>
  string(44) "Last-Modified: Mon, 15 Oct 2012 18:59:13 GMT"
  [4]=>
  string(39) "ETag: "1000000003b538-3e-4cc1da22b79de""
  [5]=>
  string(20) "Accept-Ranges: bytes"
  [6]=>
  string(18) "Content-Length: 62"
  [7]=>
  string(17) "Connection: close"
  [8]=>
  string(44) "Content-Type: text/plain; charset=iso-8859-2"
}

Jak widać - coś musiałeś pomieszać z tym Content-Type i kodowaniem w php, albo mnie nie zrozumiałeś o co mi chodzi. Mniejsza ;)

0

uważaj na treści znalezione w necie, jak widać ludzi gadających od rzeczy nie brakuje ;)

Na szczęście strasznych konsekwencji nie ma i jedynie coś może nie zadziałać :)

Generalnie pliki mają swoje kodowanie, a tagiem tylko pomagasz rozpoznać, którego z nich używasz.

No w sumie racja :P

Co do bazy to też z niej korzystam ale nie miałem z niczym innym problemów tylko właśnie z tymi danymi z pliku .txt :)

Mam nadzieję, że temat komuś kiedyś pomoże bo przeszukując google nie natrafiłem na takie coś albo nie było sensownego rozwiązania :)

Edit: no zmieniłem na text/plain w pliku, który jest odpowiedzialny za zczytywanie danych z .txt ale nie śmigało :) No ale właśnie - mniejsza

0

No mi chodziło o podawanie już gotowego wyniku przy pomocy pliku php, zamiast linkować do *.txt robić linki do: pobierztxt.php?plik=notatki
a zawartość pobierztxt.php wyglądałaby tak:

header('Content-Type: text/plain; charset=iso-8859-2');
if (preg_match('@^[a-z0-9_-]+$@i', $_GET['plik'])) { // zabezpieczenie przed directory traversal
  $sciezka = './pliki/'.$_GET['plik'].'.txt';
  if (file_exists($sciezka)) {
    readfile($sciezka); die();
  }
}
header('HTTP/1.1 404 Not Found');
die('Plik nie istnieje');

Ew. żeby linki zachować w formie http://domena/sciezka/pliki/plik.txt, a wykonywane były i tak poprzez parser php, można by użyć mod_rewrite. Ale to już chyba przekombinowane, skoro jest AddDefaultCharset ;)

0

O jezusie :D Mało z tego kodu rozumiem.
Raczej nie uczę się PHP (potrzebuję/chcę/mam pomysł na stronę ale nie widzę siebie w samym PHP :) ) tylko sobie klepię kod, trochę czytam, trochę biorę z gotowców, trochę przerabiam no i jakoś leci.
Jak już mam błąd taki, że nie potrafię znaleźć rozwiązania albo miliard prób i błędów nic nie daje to piszę na forum :)

0

A tak w ogóle to po co wysyłasz te pliki TXT?
Może wcale nie musisz ich pokazywać jako TXT?

To są
a) raporty do ściągnięcia na kompa czy
b) takie najprostsze formy wyniku działania skryptu bez formatowania do pokazania na ekranie

?

0

Są tam zapisane dane z formularzy wysłanych przez użytkowników.
Żeby nie zapychać sobie bazy postanowiłem to przechowywać w .txt, no i zapisuję dane z formularza do tego pliku.
Później odczyt jak ktoś chce zobaczyć co ktoś inny napisał.
Tak mniej więcej to można wytłumaczyć :P

W sumie sam nie wiem czemu do bazy tego nie wrzucam bo mam na niej dość dużo miejsca... Jakoś wolałem prościej do .txt :P

0

Prościej lub nie, ale raczej mało bezpiecznie - jak chronisz się przed odczytaniem poufnych danych z takich plików?

0

Powinieneś to wrzucać do bazy. No chyba że takiej nie masz lub nie korzystasz?
Nad plikami binarnymi można się zastanawiać, ale komentarze tylko w bardzo prostych rozwiązaniach są w plikach.
No i jak to potem wyrzucasz na ekran to już w ogóle zagadka - jako część strony?

Najlepiej jak po kolei wszystko zaczniesz kodować w UTF-8. Na kodowanie sposób przechowywania nie ma wpływu, a wręcz przechowywanie w bazie skomplikuje sprawę, ale pewnie w końcu w którymś momencie przejdziesz na bazę SQL. Może warto już teraz?

0

Nie "zapchasz bazy", spokojnie. A wrzucanie tego w txt to potencjalna dziura (chyba, że zabezpieczasz folder przed dostępem - to, że nikt nie zna jego nazwy to ma małe znaczenie), przeszukiwanie tego nie jest wygodne, jeżeli chcesz budować na bazie tego jakąś... bazę - to już wynajdujesz koło od nowa i znowu wydajność poleci w dół.

0

jak chronisz się przed odczytaniem poufnych danych z takich plików?

Nie chronię się :P Nie ma w tych formularzach poufnych danych...
Ten plik to po prostu zapisuje i przechowuje.

No chyba że takiej nie masz lub nie korzystasz?

Mam, czy korzystam ? Mam forum postawione na niej i jeszcze parę tabel do użytku własnego ale z bazami nie jestem zbytnio obyty :)

No i jak to potem wyrzucasz na ekran to już w ogóle zagadka - jako część strony?

$fp=fopen("plik.txt","r");
while(!feof($fp))
{
    $data=trim(fgets($fp,999));
dalsza część m.in. wypisanie echem

To część tego "skryptu" - znaleziony gotowiec na necie.

Może warto już teraz?

No może i tak ... będę się z tym musiał przespać generalnie :) Tylko czy mi się teraz to chce przerabiać i przenosić na bazę :(

chyba, że zabezpieczasz folder przed dostępem

Jak już pisałem - średnio mi na tym zależy :)

0

@dzek69 Nie chodziło mi o przekonwertowanie pliku poprzez tag tylko o cos innego o cos takiego , że mając odpowiedni formularz - w którym te teksty wprowadza powinien otrzymać odpowiednio zakodowany plik. Nie chodziło mi o konwersję pliku za pomocą tagu więc się tak nie unoś :P
Chodziło mi o stwierdzenie "Mam taki problem, że zapisuję (przez PHP) wypowiedzi z formularza w pliku .txt"
Jakby ktoś nie zauważył przeglądarka odpowiednio koduje taki plik przy przesyłaniu- dzięki czemu nie ma problemu z odczytaniem tekstu jeśli jest on wyświetlany na stronie z tym samym kodowaniem.
Przykładowo:
Mając formularz w UTF-8, a precyzyjnej z nagłówkiem nakazującym prace w UTF-8 dane zapisane z niego będą miały format UTF-8 i na stronie z kodowaniem iso-8859-2 ten sam plik będzie miał krzaczki i na odwrót :P

 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
<title>Testujemy :P</title>
</head>

<body>
<form action="" method="post">
<textarea name="text" cols="10" rows="20">
</textarea>
<input name="" type="submit" /></form>
<?php if (isset($_POST['text'])){
	file_put_contents('xa.txt',$_POST['text']);
	echo file_get_contents('xa.txt');
}
	
?>
</body>
</html>

oraz

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Czytamy krzaki</title>
</head>

<body>
<?php	
	echo file_get_contents('xa.txt');
?>
</body>
</html>

Da krzaczki w przypadku strony numer 2 natomiast przy zgodnych nagłowkach stron krzaczków nie będzie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1