[PHP] Problem z polskimi znakami

0

Witam,
założyłem sobie konto na lycos i wrzuciłem tam plik z takim źódłem:
tekst.php

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-2">
</head>

<body>
<?php 

	$dane = file ($_GET[plik]);
	$liczba_wierszy = count($dane);
	
	for ($i = 0; $i < $liczba_wierszy; $i++) {
		echo "$dane[$i]";
	}
?>
</body>
</html>

gdy wywołuję ten plik poleceniem np:

tekst.php?plik=start
To elegancko wyświetla mi to co się znajduje w pliku start, ale bez polskich znaków.
Czy ktoś mi może doradzić dlaczego i jak to naprawić?

0

Czy plik jest w iso? Kodowanie wszystkich plików musi być takie samo, w przeciwnym wypadku musisz użyć konwertowania.

0

Tak, plik jest kodowany: ISO-8859-2, a jego treść to np:

<B>bla bla bla</B>
<P> blablablabalabla</P>

Czyli poza samym tekstem i kilkoma znacznikami typu: < B > czy < P > nic więcej nie ma.

Dodam jeszcze, że na Apachu z interpreterem PHP zainstalowanym na moim kompie również wyświetla się bez polskich znaków.

A jeśli chodzi o konwertowanie to PHP może to zrobić? Czy muszę użyć jakiegoś innego oprogramowania?

0

O ile masz poprawne kodowanie pliku (nie deklarowane, ale faktyczne) - sprawdź czy na apache nie wysyła własnego nagłówka kodowania - jeśli tak, to wyślij własny nagłówek Content-type za pomocą funkcji header.

0

Nie prościej zapisać ten start notatnikiem i kodowanie na stronie ustawić na windows-1250

0

Nie ;) Kodowanie windows-1250 to złyyy nawyk.

0

@Coldpeer: a jakieś uzasadnienie tego? Jeśli jest zakodowane poprawnie, ma ustawiony właściwy charset, i wygląda jak ma wyglądać (czyt. jest czytelne dla grupy docelowej) to jakie ma to znaczenie czy to ISO-8859-1, latin2 czy UTF-16 ?

0

Hej fajnie by było, żeby kodowanie strony było w UTF-8 - To bobry nawyk ;-)

Wtedy jak dołączasz jakieś stringi to możesz je przpuścić przez funkcję

iconv('windows-1250', 'UTF-8', $Jakis_string);

Przyjrzyj sie tej funkcji na
http://pl.php.net/manual/fi/function.iconv.php

0

mysz: W dokumentach XML kodowania Windows-1250 nie powinno się używać, dozwolony jest tylko UTF i ISO. Z bardzo prostego powodu - każdy parser XML musi obsługiwać te kodowania. Oczywiście nic nie stoi na przeszkodzie autorom parserów, aby dodali obsługę kodowania Windows, ale nie jest to wymagane.

W przypadku dokumentów HTML, bo tutaj widzę HTML 4.01 to kodowania Windows także nie powinno się stosować, bo jest to tylko i wyłącznie standard pewnej korporacji, nikt nie każe tworzyć przeglądarki z obsługą tego. To, ze wszystkie szanujące się obsługują to kodowanie, to tylko ukłon w stronę "webmasterów", tak samo jak wszelkie Quirks Mode czy obsługa document.all w Gecko.

Osobiście znam kilka przeglądarek (ale to było dawno temu), które nie rozumiały w ogóle Win-1250, za to ISO-8859-2 - jak najbardziej. Unikodu też nie rozumiały, ale to inna sprawa, bo w tych czasach się go nie używało.

@voldenet: Notatnik, przynajmniej w Windows XP i nowszych, obsługuje także zapis w UTF-8.

0

@Ktos: Mówimy o [X]HTML, nie XML, więc to nie argument. To samo dotyczy dawnych czasów.

A co do tego, co się powinno: powinno być tak żeby działało. Wszystkie browsery w tej chwili obsługują CP1250. Poza tym, jeśli grupą docelową odbiorców strony są stricte użytkownicy Windows, to nie widzę w ogóle tematu.

Ważniejsza jest prawidłowa deklaracja, zgodna z rzeczywistym kodowaniem dokumentu.

0

Jeżeli mówimy o XHTML to mówimy o XML ;-)

Ale dlaczego grupą docelową mają być użytkownicy Windows? Użytkownik Linuksa, w pracy, chce wejść i widzi krzaki. W domu używa Windows, ale nie ma Internetu. Przykład teoretyczny, bo wszystkie szanujące się przeglądarki umieją CP1250, jak wspomniałem. A może używa PDA, które sobie z CP1250 radzą (radziły niedawno) średnio? A jak sobie z tym radzi Lynx/Links? A Googlebot? (akurat jak te dwa ostatnie to nie mam pojęcia). Oczywiście możesz powiedzieć, że kogo tam obchodzi 1% użytkowników, ale dlaczego na ten jeden procent ma się strona zamykać? Dlaczego sztucznie ograniczać grupę docelową?

Nie zaprzeczę jednak, że prawidłowa deklaracja znacznie ułatwi zadanie i sprawi, że użycie Win-1250 będzie mniejszym złem.

Dyskusja jest obecnie faktycznie bezcelowa, jednak mam jeden mały argument. Skoro dbamy o poprawny kod (X)HTML, zgodny z zaleceniami komitetu standaryzacyjnego, to dlaczego w kwestii kodowania mamy polegać na "standardzie", który nie jest standardem i zostać nim nie może, zamiast stosować czy to normy polskie, czy światowe ISO?

A już tak BTW to szukając informacji "dlaczego nie Win-1250" natknąłem się na Twoje prehistoryczne posty w dyskusji na ten temat, na grupie pl.comp.www ;-)

I proponuję EOT z wnioskiem, że Win-1250 nie jest standardem, ale jego użycie, w połączeniu z prawidłowym charsetem zadeklarowanym, będzie po prostu mniejszym złem, niż zrezygnowanie z deklaracji charsetu (czy nieprawidłowa deklaracja), ale może (choć jest to mało prawdopodobne) spowodować sztuczne ograniczenie grupy docelowej. I niech każdy robi jak chce, byle informował przeglądarkę co tam wymyślił :)

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