PHP - brak polskich znaków, utf-8

PHP - brak polskich znaków, utf-8
BA
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:25
0

Witam.

Stworzyłem serwis internetowy na bazie HTML (strona i podstrony w sensie układu i wyglądu), PHP (funkcjonowanie strony i mechanizm podmiany podstron) oraz CSS (sterowanie stylami elementów strony).
Wszystko działa zgodnie z planem poza jedną rzeczą:
tekst (tytuł strony lub podstrony) na karcie przeglądarki internetowej wyświetla się bez polskich znaków (w miejscu "polskich liter": ą, ę... jest dziwny pytajnik).

W kodzie html w sekcji <head> mam normalny zapis:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
i w treści strony polskie znaki są.

W plikach php miałem do niedawna następujące zapisy:
$tytul = "Podstrona x";
$tytul = ("windows-1250","utf-8",$tytul);

a w kodzie html w sekcji <head> taki zapis:
<title><?php echo $tytul; ?></title>

Chodziło o to, aby każda podstrona miała inny tytuł wyświetlany na karcie przeglądarki.
I to działało normalnie i z polskimi znakami wszędzie, do jakiegoś czasu.
Potem nagle bez zmiany czegokolwiek strona przestała się otwierać i wyświetlała komunikat:
Parse error: syntax error, unexpected ',' in ... on line ...
Na jakimś zagranicznym forum znalazłem info, że z zapisu:
$tytul = ("windows-1250","utf-8",$tytul);
należy usunąć oba przecinki i zastąpić je kropkami, czyli:
$tytul = ("windows-1250"."utf-8".$tytul);

I po tej zmianie strona na nowo działa, ale na karcie przeglądarki brak polskich znaków.
Skoro nic nie zmieniałem w kodzie html i php, to musi to być wina jakichś zmian w przeglądarce, windowsie... jakichś aktualizacji... tak sądzę.

Nic nie daje ani skasowanie tego zapisu:
$tytul = ("windows-1250","utf-8",$tytul);
ani skasowanie samego słowa windows-1250 z tego zapisu.

Co to może być?

axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:dzień
  • Lokalizacja:Warszawa
  • Postów:2251
0

Tytuł (title) strony nie ma nic do kodowania. Nie rób stronek kodowanych w windows-1250 (relikt przeszłości) .Użyj tego w head
<meta charset="utf-8" />
a w title - wsadzaj tylko tekst którego potrzebujesz.
Przykład

Kopiuj
<html>
    <head>
        <meta charset="utf-8" />
        <title>Żółw</title>
   </head>
   <body>
    ...
    </body>
</html>
edytowany 1x, ostatnio: axelbest
BA
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:25
0
bartekbartek napisał(a):

Witam.

Stworzyłem serwis internetowy na bazie HTML (strona i podstrony w sensie układu i wyglądu), PHP (funkcjonowanie strony i mechanizm podmiany podstron) oraz CSS (sterowanie stylami elementów strony).
Wszystko działa zgodnie z planem poza jedną rzeczą:
tekst (tytuł strony lub podstrony) na karcie przeglądarki internetowej wyświetla się bez polskich znaków (w miejscu "polskich liter": ą, ę... jest dziwny pytajnik).

W kodzie html w sekcji <head> mam normalny zapis:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
i w treści strony polskie znaki są.

W plikach php miałem do niedawna następujące zapisy:
$tytul = "Podstrona x";
$tytul = ("windows-1250","utf-8",$tytul);

a w kodzie html w sekcji <head> taki zapis:
<title><?php echo $tytul; ?></title>

Chodziło o to, aby każda podstrona miała inny tytuł wyświetlany na karcie przeglądarki.
I to działało normalnie i z polskimi znakami wszędzie, do jakiegoś czasu.
Potem nagle bez zmiany czegokolwiek strona przestała się otwierać i wyświetlała komunikat:
Parse error: syntax error, unexpected ',' in ... on line ...
Na jakimś zagranicznym forum znalazłem info, że z zapisu:
$tytul = ("windows-1250","utf-8",$tytul);
należy usunąć oba przecinki i zastąpić je kropkami, czyli:
$tytul = ("windows-1250"."utf-8".$tytul);

I po tej zmianie strona na nowo działa, ale na karcie przeglądarki brak polskich znaków.
Skoro nic nie zmieniałem w kodzie html i php, to musi to być wina jakichś zmian w przeglądarce, windowsie... jakichś aktualizacji... tak sądzę.

Nic nie daje ani skasowanie tego zapisu:
$tytul = ("windows-1250","utf-8",$tytul);
ani skasowanie samego słowa windows-1250 z tego zapisu.

Co to może być?

Instrukcja w kodzie php:
$tytul = ("windows-1250","utf-8",$tytul);
została znaleziona na jakimś forum zagranicznym i miała służyć własnie temu, aby w karcie przeglądarki wyświetlały się polskie znaki, gdyż pierwotnie bez tej instrukcji zamiast polskich znaków były krzaczki.

axelbest
Nie musisz cytować samego siebie, a to co tutaj napisałeś nijak się odnosi do tego co napisałem ja. Próbowałeś zrobić to tak jak pisałem? A takową instrukcję o której piszesz, równie dobrze mogłeś znaleźć w polskim lesie :) co za różnica czy polskie czy zagraniczne forum? Jesteśmy w internecie :)
BA
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:25
0

W sekcji <head> w html mam:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
(nie mam nigdzie w html żadnego zapisu windows-1250).
Na stronie polskie znaki są prawidłowo.
Tylko w tytule karty przeglądarki jest źle.
Gdyby nie to, że niektóre podstrony mają tytuł do wyświetlania (nie tytuł strony w kodzie czy pliku, bo tu oczywiście nie stosuje polskich znaków), który zawiera znaki polskie np: "Moja strona - Wiadomości ze świata" problemu nigdy bym nie zauważył.

axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:dzień
  • Lokalizacja:Warszawa
  • Postów:2251
0

A skąd masz te dane w title? z bazy danych? Jeśli tak to może w bazie masz inne kodowanie i stąd krzaczki.

frm.PNG

  • frm.PNG (18 KB) - ściągnięć: 934
edytowany 1x, ostatnio: axelbest
BA
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:25
0

Dane w title mam z plików php, tj. każda podstrona ma swój plik php (dla mechanizmu podmiany podstron) i tam mam zapis:
$tytul = "Podstrona x";
(między "" są oczywiście polskie znaki).
Jak tworzę nową podstronę, to tworzę nową podstronę w html (treść) i do niej plik php i tam nadaję tytuł do wyświetlania w przeglądarce.

ps.
cytować oczywiście siebie nie zamierzam, coś "przeskoczyło" na stronie forum.

Tytułów podstron w html, poza stroną główną (strukturalną), to w ogóle nawet nie mam, ponieważ zapis w sekcji <head>:

<title><?php echo $tytul; ?></title> pochodzi z języka php, i tylko tam następuje komunikacja - tytuł strony nadawany jest w zależności od parametru tytul z plików php. Gdybym miał witrynę robioną tylko w html, to oczywiście nadałbym każdej podstronie inny tytuł z polskimi znakami i zapewne by się wyświetlał prawidłowo, ale mam witrynę zrobioną w php.
edytowany 1x, ostatnio: bartekbartek
axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:dzień
  • Lokalizacja:Warszawa
  • Postów:2251
0

Przede wszystkim postaw sobie pytanie - na jakim kodowaniu mam się opierać? Czy to jest istniejący projekt czy dopiero zaczynasz?
Anyway.... jeśli w bazie masz zakodowane teksty w jakimś latin - to zmień (o ile nie popsuje Ci to projektu) na np. utf8_polish_ci
Kolejna sprawa jeśli składasz taką stronkę z oddielnych plików html i php - to możesz mieć taką sytuację - gdzie masz np 3 kodowania:

  • plik php może być zapisany jako windows1250
  • dane przekazywanego do tego phpa mogą być np w latin1
  • Twój kod html mieć utf8

Musisz zrobić tak by było jedno kodowanie - co chodzi o zawartość pliku to możesz skonwertować istniejący plik do utf8 (notepad++), lecz pamiętaj że to może Ci zgubić istniejące ogonki.

BA
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:25
0

No właśnie, nie rozumiem istoty spójności tych kodowań i nie znam się na tym.
Czy wyświetlany tekst na mojej witrynie zależny jest od edytora kodu, jakiego używam, np. Notepad, notatnik, FrontPage???
Otwieram sobie pliki w różnych edytorach w zależności od potrzeb.

Witryna jest kompletna i działała prawidłowo:
1/ w kodzie html miałem i mam zapis o utf-8 - tylko jeden zapis w sekcji <head> tylko na stronie głównej - strukturalnej; na tej stronie inne podstrony ładowane są poprzez polecenie z php *include * z parametrem - i te podstrony nie mają już żadnej informacji o utf-8, ani nawet tytułów title;
2/ w plikach php jedyne zapisy to 2 parametry podstrony: nazwa (dla załadowania treści) i tytuł (dla załadowania tytułu do karty przegladarki).

Pierwotnie na karcie przeglądarki tytuł wyświetlał się bez polskich znaków (krzaczki), więc wprowadziłem do każdego pliku php zapis:
$tytul = ("windows-1250","utf-8",$tytul);
i polskie znaki się pojawiły.
Witryna działała przez rok prawidłowo. Po roku, bez żadnej ingerencji w kod, nagle witryna się nie otwarła - przeglądarka wyświetliła komunikat:
Parse error: syntax error, unexpected ',' in ... on line ...
Zamianiłem zapis (jak zasugerowano):
$tytul = ("windows-1250","utf-8",$tytul);
na zapis:
$tytul = ("windows-1250"."utf-8".$tytul);
i witryna znów się otwarła, ale bez polskich znaków TYLKO na kartach przeglądarki - w treści jest wszystko OK.

Skoro niczego nie zmieniałem w kodzie, kodowaniach, to musi to być wina zmian ustawień po stronie przeglądarki, windowsa, google, mojego komputera...
Przez rok wszystko działało i nagle przestało.

edytowany 1x, ostatnio: bartekbartek
axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:dzień
  • Lokalizacja:Warszawa
  • Postów:2251
0

Tak, edytor ma znaczenie - np zwykły notatnik w windowsie nie rozpoznaje znaków końca linii z linuxa https://pl.wikipedia.org/wiki/Koniec_linii
https://superuser.com/questions/294219/what-are-the-differences-between-linux-and-windows-txt-files-unicode-encoding

Odnosząc się do Twoich punktów:

  1. Tu wg mnie masz dobrze - w jednym miejscu w head masz utf8 i styknie.
  2. Otwórz problematyczne pliki za pomocą Notepad++ i skonwertuje je na utf8 (sprawdź czy polskie ogonki nie zmieniły się w krzaczki). Ogólnie to jeszcze pojawia się kwestia https://pl.wikipedia.org/wiki/BOM_(informatyka) - ale to też w notepad++ ogarniesz.
edytowany 1x, ostatnio: axelbest
BA
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:25
0

W każdym edytorze: FrontPage, notatnik, Notepad++, Word tekst kodu wyświetla się co do polskich znaków jednakowo, prawidłowo.
Pomijam fakt, że tabulatory zamieniane są w widoku kodu na spacje itp., ale to nie wpływa przecież na treść kodu.

W Notepad++ przy ustawieniu opcji kodowania w ustawieniach na utf-8 czy utf-8 z bom czy bez bom nie dziej się nic.
Co to znaczy skonwertować plik php do formatu utf-8?
Plik tekstowy to zapis znaków.
Chyba nie jest tak, że treść kodu (nie wygląd w podziale na wiersze, akapity itp.) zmienia się w zależności od edytora?
Co najwyżej może się zmienić wyświetlanie tego tekstu na ekranie w danym programie, edytorze.

Skoro polskie znaki nie wyświetlają się w przeglądarce, a ja je wpisałem, to coś musiało zmienić w przeglądarce, windowsie... tym bardziej, że przedtem działało dobrze.

A co z taką poradą:
https://www.forum.optymalizacja.com/topic/51846-jak-zmieni%C4%87-kodowanie-pliku-php

Może trzeba dopisać w plikach php komendę analogiczną do komendy utf-8 w html i tyle?
Tylko jaka to komenda?

edytowany 1x, ostatnio: bartekbartek
axelbest
Czy plik w którym zawarta jest już konkretną wartość title (jak pisałeś jest to oddzielny plik php) otwierałes w notepad++ i brałeś opcje konwertuj na utf8? Pamiętaj by potem zapisać tako plik.
BA
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:25
0

DZIAŁA

Zamieniłem w pliku php zapis

Kopiuj
$tytul = ("windows-1250","utf-8",$tytul);

na

Kopiuj
$tytul = iconv('iso-8859-2','utf-8',$tytul);

i działa

zgodnie z tą poradą:
https://www.forum.optymalizacja.com/topic/51846-jak-zmieni%C4%87-kodowanie-pliku-php

Tylko, czy to wystarczy raz na zawsze. Oby.

edytowany 2x, ostatnio: Patryk27
Patryk27
Pamiętaj o umieszczaniu kodu w odpowiednich znacznikach.
BA
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:25
0

Czy plik w którym zawarta jest już konkretną wartość title (jak pisałeś jest to oddzielny plik php) otwierałes w notepad++ i brałeś opcje konwertuj na utf8? Pamiętaj by potem zapisać tako plik. - axelbest dziś, 14:33

Absolutnie nie.
Żadnego pliku php, ani html, ani innego w niczym nie konwertowałem do utf-8.
Podejrzewam, że obecne przeglądarki działają tak, że, aby wyświetlały wszędzie polskie znaki, które pobierają z treści plików html i php, należy zawsze:
1/ w pliku / plikach html zapisać w <head>

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

2/ w pliku / plikach php zapisać

Kopiuj
$parametr = iconv('iso-8859-2','utf-8',$parametr);

gdzie *parametr *to zbiór wszelkich danych tekstowych z kodu php do wyświetlania gdziekolwiek na stronie.

To byłby chyba jakiś absurd, gdyby treść kodu programu zmieniała się w zależności od edytora, w którym ten kod otworzymy.
Zmieniać to może się co najwyżej widok i wygląd tego kodu oraz poszczególnych znaków i liter, zgodnie z możliwościami, które przewidział autor programu: edytora, przeglądarki...

W każdym razie to działa - przynajmniej w przeglądarce FF i Chrome. Innych nie sprawdzałem.

edytowany 1x, ostatnio: bartekbartek
L7
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 12 godzin
  • Postów:433
0
bartekbartek napisał(a):

Podejrzewam, że obecne przeglądarki działają tak, że, aby wyświetlały wszędzie polskie znaki, które pobierają z treści plików html i php, należy zawsze:
1/ w pliku / plikach html zapisać w <head>

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

2/ w pliku / plikach php zapisać

Kopiuj
$parametr = iconv('iso-8859-2','utf-8',$parametr);

gdzie *parametr *to zbiór wszelkich danych tekstowych z kodu php do wyświetlania gdziekolwiek na stronie.

Bzdura, obecne przeglądarki tak nie działają.Przeczytaj co robisz funkcją iconv.

bartekbartek napisał(a):

To byłby chyba jakiś absurd, gdyby treść kodu programu zmieniała się w zależności od edytora, w którym ten kod otworzymy.
Zmieniać to może się co najwyżej widok i wygląd tego kodu oraz poszczególnych znaków i liter, zgodnie z możliwościami, które przewidział autor programu: edytora, przeglądarki...

Tak, to sprawdź sobie załączniki. Ten sam plik otworzony dwoma edytorami. W jednym (starszym) edytorze jest poprawnie wyświetlane a w drugim nie.

bartekbartek napisał(a):

W każdym razie to działa - przynajmniej w przeglądarce FF i Chrome. Innych nie sprawdzałem.
Działać działa ale rozwiązanie jest takie z typu "taśma klejąca".

Twoim problemem nie jest niezgodność czy sposób działania przeglądarek tylko sam sposób tworzenia strony. Stronę HTML masz w kodowaniu (przykładowo) UTF-8 (tam też deklarujesz takie kodowanie) a pliki PHP zapisane ze znakami zgodnymi z kodowaniem ISO-8859-2. Moim zdaniem wina leży po stronie niewłaściwej konfiguracji edytorów. Przykładowo stworzysz teraz plik PHP w programie gdzie domyślnym kodowaniem jest Win-1250 i co... będziesz każdy plik opatrywał funkcją iconv ?

BA
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:25
0

Nie znam się na tych kodowaniach, nawet nie wiem, co to tak naprawdę jest to całe kodowanie, ani instrukcja iconv.
Potrzebuje stworzyć stronę w technice html i php w ten sposób, aby mieć pewność, że strona wyświetli się w maksymalnej ilości przeglądarek maksymalnej ilości odbiorców zgodnie z moim projektem - wyglądem i treścią, a te dwa zapisy jak na razie to umożliwiają - i chyba nawet gwarantują (mam nadzieję).

To co piszesz tu:

Tak, to sprawdź sobie załączniki. Ten sam plik otworzony dwoma edytorami. W jednym (starszym) edytorze jest poprawnie wyświetlane a w drugim nie.

mówi właśnie o tym, o czym napisałem: że kod programu JEST WYŚWIETLANY inaczej w różnych edytorach, a nie ma w nich inną treść!

Jeśli w pliku html lub php napisałem wyraz ŻÓŁĆ naciskając na klawiaturze klawisze ZOLC z Altem, to to jest treść, a jak te pliki otworzę w jakimś starym edytorze i zobaczę na ekranie wyraz ZOLC, albo krzaczki, to czy oznacza to zmianę treści?
Jeśli tak, to byłby to rzeczywiście jakiś absurd.

Przesyłam pliki php i html koledze, on je otwiera w swoim jakimś edytorze nie ingerując w treść (tylko je wyświetla na ekranie), odsyła mi, a tu strona wygląda u mnie już inaczej w tej samej przeglądarce, ponieważ treść słów się zmieniła?

To musi być wina interpretacji do wyświetlania plików php, html... przez poszczególne przeglądarki, edytory...
Tak zakładam, że jak za kilka lat zamiast FF i Chrome najpopularniejszą przeglądarką będzie ABC i jej twórca stworzy sobie jakieś nowe mechanizmy nie obsługujące starych formatów, do aby stare strony się tam wyświetlały, trzeba będzie mieć jakąś "przejściówkę", czyli wpisać do kodu jakąś komendę, polecenie...

Przykładowo stworzysz teraz plik PHP w programie gdzie domyślnym kodowaniem jest Win-1250 i co... będziesz każdy plik opatrywał funkcją iconv ?

No tak właśnie wszędzie zalecają, np. w html - dopisuj w sekcji <head> takie zapisy (w które w ogóle nie wnikam) jak:

Kopiuj
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Kopiuj
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

No to się stosuję, by strona działała.

edytowany 2x, ostatnio: bartekbartek
KR
  • Rejestracja:prawie 16 lat
  • Ostatnio:5 miesięcy
  • Postów:2514
0

Żeby poprawnie się wyświetiło to kodowanie musi się zgadzać. Np.:

  1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  2. Przy wysyłaniu bajtów albo w pliku ustaw UTF-8 (z reguły bez BOM się wysyła jak kodowanie jest znane)

Jak plik zakodujesz w iso-8859-2 i w htmlu użyjesz tego samego to też będzie działać zakładająć, że klient (przeglądarka) wie co to iso-8859-2

Jak masz jakieś dane z innego miejsca w środku wygenerowanego dokumentu to albo muszą mieć te same kodowanie albo trzeba je przekonwertować.

Edytory tekstowe nie wiedzą nic o kodowaniu dopóki im nie powiesz jakie jest albo jak poprawnie zgadną (czasami ta informacja jest przechowywana, ale nie zawsze). W przypadku kodowania utf-8 z BOM praktycznie każdy edytor powinien otworzyć taki plik poprawnie, bez BOM większość edytorów zgadnie poprawnie że to UTF-8. Jeśli używasz stron kodowych (charset, np. iso-8859-2) a nie Unicode (np. UTF-8, UTF-16LE, UTF-32) to edytor prawie zawsze musi zgadywać - w przypadku plików jak XML, format pliku może zawierać metadane które pomgają edytorowi wybrać jeśli z nich skorzysta.

BOM powinien być tylko i wyłącznie przed całym dokumentem, a nie w środku (jeśli dynamicznie dodajesz zawartość pliku to trzeba na to uważać)


░█░█░█░█░█░█░█░█░█░█░█░
edytowany 1x, ostatnio: krwq
L7
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 12 godzin
  • Postów:433
0
bartekbartek napisał(a):

mówi właśnie o tym, o czym napisałem: że kod programu JEST WYŚWIETLANY inaczej w różnych edytorach, a nie ma w nich inną treść!

A kto pisał o zmianie treści. Podsyłając te dwa screeny chciałem Tobie pokazać, że TA SAMA treść może być wyświetlana inaczej w różnych edytorach. To tak jakbyś miał maszynę "dekodującą" gdzie musisz podać odpowiedni klucz do odszyfrowania. Masz JEDEN plik, który przy użyciu prawidłowego klucza będzie wyświetlał się normalnie a przy użyciu błędnego klucza wyjdą już nam "krzaczki".

Popatrz sobie na to inaczej. Tabela ASCII ma 127 znaków (tylko). Czyli - literka "A" dla Ciebie jest literką "A" a dla komputera (nie dla przeglądarki) jest to ZNAK o kodzie (DEC) 65. I to wszystko. A teraz pomyśl, gdzie umieścić znaki polskie, japońskie, norweskie itp.? No to ktoś tam kiedyś wpadł na pomysł, żeby dodać 1bit do istniejącego ASCII (ASCII było zestawem 7 bitowym) i już można było mieć 255 znaków. To ciągle mało żeby obsłużyć wszystkie języki świata. No to wymyślono standardy kodowania właśnie takie jak ISO 8852, UTF-8, Win-1250. I teraz kod (całkiem przykładowo podaję) 160 (DEC) w jednej standardzie kodowanie wyświetlać będzie znak Ł a w drugim đ :)

BA
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:25
0

Nie znam się na tych definicjach i pojęciach dokładnie.
Interesuje mnie tylko dwie rzeczy:
1/ stworzyć witrynę w technologii html, php, css... (i innych technikach, jeśli uznam, że są mi potrzebne, bo dają określone możliwości), która to witryna w maksymalnej ilości przeglądarek u maksymalnej ilości użytkowników będzie wyglądać TAK, JAK ZAPROJEKTOWAŁEM, co do i WYGLĄDU i TREŚCI i WYŚWIETLANIA ZNAKÓW
2/ móc otworzyć wszelkie pliki tej witryny (dla widoczności KODU) w edytorach, w których będzie 100% pewności, że tekst, który jest tym kodem, wygląda tak, jak go wpisałem, czyli jak wpisałem gdzieś ŻÓŁW (bo był taki zamiar użycia tego słowa), to widzę, że w kodzie wyraz ŻÓŁW, a nie ZOLW.

Korzystam z różnych edytorów: FrontPage, Notepad++, notatnik, nawet Word - dany plik otwieram, gdzie mi wygodniej.
Jeśli się okaże, że np. Word otwiera mi plik html i nie wyświetla tam polskich znaków, to albo szukam ustawień opcji Worda, bo może to tylko kwestia ustawień wyświetlania polskich znaków (czyli tego kodowania), albo z tego edytora nie korzystam.
Jak na razie wszelkie pliki html, php, css wyświetlają mi się identycznie co do polskich znaków i we FrontPage, i w Notepad++, i w notatniku i nie ma z tym problemu i nigdy nie było.
Jedyny problem z wyświetlaniem pojawił się w przeglądarce, a skoro został rozwiązany, to temat zamknięty.
Witryna ma wyglądać tak, jak zaprojektował autor, i wyświetlać treść tak, jak zaprojektował autor - a w jakich edytorach widzę pliki tej witryny i jak one wyglądają, to inna sprawa.

axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:dzień
  • Lokalizacja:Warszawa
  • Postów:2251
2

Pisanie Korzystam z różnych edytorów: FrontPage, Notepad++, notatnik, nawet Word - dany plik otwieram, gdzie mi wygodniej.to tak jak byś miał pretensję że chcesz jeździć 300km/h - ale jeździsz różnymi pojazdami, ferrari, porsche, Fiat 126p i stara syrenka. Nie da się. Nawet programy odtwarzania muzyki mające inne algorytmy potrafią taką samą mp3 odwtorzyć zupełnie inaczej.

Podkreślę jeszcze - że jeśli edytor nie obsługuje np arabskiego kodowania to wyświetli krzaczki i nic z tym nie zrobisz. Jak nie chcesz mieć krzaczków to nie używaj liter innych niz domyślne A-Z.

Zrozum, że mając plik w formacie txt/php/cokolwiek który został napisany z innym zestawem znaków niż te które dany edytor rozpoznaje to z g..wna bata nie ukręcisz. Po prostu czasami nie da się.

Twój problem - aby Twoja strona była dobrze wyświetlana wszędzie, to odwieczny problem webdeveloperów. A to błędy w css'ie na IE, a to problemy z htmlową składnią na safari, albo na firefoxie padding z cssa jest inny niż na starym chromie.... Nie unikniesz tego - chyba że robisz prostą stronę. A zakładam że taką robisz, więc otwieraj pliki w jednym edytorze, konwertuj wszystko na utf8 i nie będziesz miał problemu. Naprawdę, bo obecnie uparcie stoisz przy swoim stanowisku, że z Twoim kodem i plikami jest wszystko ok, tylko te edytory takie wredne. Napisaliśmy Ci już kilka razy co powinieneś zrobić, ale jeszcze powtórzę:

  1. Otwieraj pliki tylko w jednym edytorze
  2. Stosuj to samo kodowanie
  3. Jak robisz coś w phpie/htmlu i cssie to nie korzystaj z tych edytorów FrontPage, Notepad++, notatnik, nawet Word tylko ściągnij sobie jakieś IDE i rób tylko w nim. Np darmowy netbeans wystarczy Ci - tylko tez pamietaj by ustawic w projekcie utf8
  4. Kod który podałem w jednym z poprzednim postów działa poprawnie wszędzie, więc zrób to analogicznie.
  5. Jak dalej będziesz miał problem to wrzuć tutaj pliki ze swoim projektem i wtedy Ci lepiej pomożemy.
czysteskarpety
czysteskarpety
u mnie po ostatniej aktualce Notepad++ zaczął psocić i zapisywać w ANSI, na szczęście używam z doskoku więc łatwo znalazłem winowajcę błędów :)
BA
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:25
0

Po pierwsze, nie mam żadnych pretensji do tego, że w różnych edytorach tekst kodu **może ** (a nie musi) wyświetlać się inaczej, a po drugie nie mam nawet takiego problemu, że tekst kodu w różnych edytorach wyświetla mi się inaczej, bo w tych wszystkich edytorach tekst kodu wyświetla mi się dokładnie tak samo.
Jedyne, czym różnią się, i to czasem tylko, te edytory pod względem wyświetlania tekstu kodu, jest **układ **akapitów, tabulacji i znaków końca linii, a to w niczym nie przeszkadza, bo nie ingeruje w żaden sposób w **treść **kodu.
To oczywiste, że różne edytory będą wyświetlać tekst kodu czasem różnie pod względem układu tekstu albo nie poradzą sobie z wyświetlaniem niektórych znaków.

Z edytora FrontPage korzystam i warto korzystać, bo to jedyny chyba edytor, do którego można hurtowo kopiować tekst z Worda (i innych źródeł) na zasadzie WYSYWIG = kopiuj / wklej oraz edytować tam tekst jak w Wordzie (w dużym stopniu), a dopiero potem ingerować w styl akapitów, obiektów w samym kodzie.
Oczywiście layout strony możliwy jest do sprawdzania na etapie projektowania tylko w przeglądarce, choć dla prostych stron widok strony we FrontPage może być identyczny co w przeglądarce, co jest plusem.

A witrynę akurat mam skomplikowaną pod względem i stylów, i treści i mechanizmów dynamicznych (linki, podstrony, dynamiczna zmiana rozmiarów pól itd.), dlatego korzystam z html, php, css, js jednocześnie.
I wszystko działa bardzo dobrze: i treść i wygląd i zachowanie elementów witryny w przeglądarce są w 100% zgodne z planem, a we wszystkich edytorach tekst plików i kod źródłowy wyświetla się identycznie.

Problem był tylko z wyświetlaniem polskich znaków w SAMEJ PRZEGLĄDARCE.
Skoro zapis *iconv *go rozwiązał, to jest ok - nie wnikam już w żadne "teoretyczne" kwestie kodowań.
Ktokolwiek wejdzie na moją stronę, widzi ją zgodną z zamierzeniem autora.

axelbest
Nadal Ci powtórzę że problem nie tkwiłi i nie tkwi w przeglądarce :)
BA
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:25
0

OK.
Problem na razie mam rozwiązany, prawdopodobnie docelowo.
Dzięki za wszelkie informacje o tych kodowaniach.

Neutral
  • Rejestracja:około 9 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Polanów
  • Postów:151
0

Jeśli coś by szwankowało u Ciebie w kodowaniu strony, to zamiast używać jakiś iconv, to możesz użyć:

PHP. Use the header() function before generating any content, e.g.:
header('Content-type: text/html; charset=utf-8');

https://www.w3.org/International/articles/http-charset/

BA
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:25
0

Zamieniłem zapis

Kopiuj
$tytul = iconv('iso-8859-2','utf-8',$tytul);

na ten header

Kopiuj
header('Content-type: text/html; charset=utf-8');

i nie działa.

Ale dzięki za link.
Może to rzeczywiście jest zależne trochę od edytora.
W moich edytorach wszystko się zawsze wyświetlało prawidłowo, a chodzi o to, by wyświetlało się dobrze w przeglądarce, co komenda *iconv *uczyniła.

arczinosek
  • Rejestracja:prawie 7 lat
  • Ostatnio:około rok
  • Lokalizacja:Warszawa
  • Postów:86
2

Kodowanie znaków to sposób ich zapisu binarnego. Tak jak ktoś wcześniej pisał, literka A to w ASCII liczba 65. Problem pojawia się, kiedy chcemy zapisać np. literę Ą. UTF8 działa w ten sposób, że dla znaków standardowych używa 1 bajtu, ale już np. dla Ą, potrzebuje 2 bajtów. Nie pamiętam jak działa iso-8859-2, ale na pewno inaczej.
Twój problem polega na tym, że część plików masz zapisanych w utf8 a część w iso-8859-2. Na pierwszy rzut oka ciężko Ci to zobaczyć bo edytory są na tyle mądre, że wiedzą wg. którego kodowania mają Ci pokazywać tekst. Dlatego jak otworzysz każdy plik z osobna to wydaje się, że jest wszystko ok, ale nie jest. W jednym pliku literkę Ą możesz mieć zapisaną jako np. 1010 1010 1010 1010 (załóżmy, że utf8) a w innym tą samą literkę jako 0101 0101 0101 0111 (załóżmy, że iso-8859-2).
Gdyby przeglądarka wyświetlała tylko jeden plik to nie byłoby problemu. Ale Ty w PHP łączysz te pliki w jeden (który przesyłany jest do przeglądarki) i przeglądarka musi się zdecydować wg którego kodowania wyświetlać znaki. Dodając znacznik META mówisz jej, jak ma być. Ustawiłeś utf8 a przeglądarka dostaje ciąg znaków 0101 0101 0101 0111 i wtedy wyświetla krzaczki a nie Ą. Funkcja iconv zmienia właśnie binarną reprezentację stringu, dlatego problem "znika".
Podsumowując, najlepszym rozwiązaniem jest przejrzeć wszystkie pliki i upewnić się, że wszystkie zapisane są w UTF8. Wtedy będziesz mógł zrezygnować z wszystkich wywołań iconv i zawsze będzie Ci to działać jak należy.

PS. Używanie tak dużej ilości edytorów sprzyja bałaganowi w kodowaniu. Edytor A może otworzyć prawidłowo plik utf8, ale zapisać go później jako np. iso-8859-2. Dobry edytor nie powinien się tak zachowywać. Prawdopodobnie narzędzia od microsoft robią Ci taki bałagan ;)

axelbest
Dokładnie, dzięki ze dałeś tak rozbudowany opis, bo ja już nie miałem sił w powtarzaniu tego, ze pliki należy skonwertować na utf8. Może to przemówi do OP.
AR
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad rok
0

arfen.radom.pl/Blog/polskie-znaki-w-php-prosty-przyklad/
Może się przyda

Freja Draco
Freja Draco
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 3 lata
  • Postów:3394
0
bartekbartek napisał(a):

Po pierwsze, nie mam żadnych pretensji do tego, że w różnych edytorach tekst kodu **może ** (a nie musi) wyświetlać się inaczej

To nawet nie chodzi o to, że edytor może wyświetlać ten kod inaczej, żel że może go później również inaczej zapisać. Z tego co pamiętam FrontPage (łza się w oku kręci) zapisywał poprawnie tylko pliki stworzone przez niego samego, a wszystkie inne poprawiał po swojemu. A co Word może zrobić z biednym HTML-em, to się wolę nawet nie zastanawiać. Chociaż może współczesne wersje lepiej sobie z nim radzą.


Freja Draco
Freja Draco
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 3 lata
  • Postów:3394
0
arczinosek napisał(a):

Twój problem polega na tym, że część plików masz zapisanych w utf8 a część w iso-8859-2. Na pierwszy rzut oka ciężko Ci to zobaczyć bo edytory są na tyle mądre, że wiedzą wg. którego kodowania mają Ci pokazywać tekst. Dlatego jak otworzysz każdy plik z osobna to wydaje się, że jest wszystko ok, ale nie jest. W jednym pliku literkę Ą możesz mieć zapisaną jako np. 1010 1010 1010 1010 (załóżmy, że utf8) a w innym tą samą literkę jako 0101 0101 0101 0111

Dawno już nie spotkałam się z podobnymi problemami, ale w dawnych czasach radosnej twórczości odnośnie stron kodowych stworzono taki genialny program:
http://www.gzegzolka.com/

Można sobie zażyczyć, żeby wszystkie plik z danego katalogu przekodować na określone kodowanie niezależnie od tego jakie mają aktualnie.


Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)