Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Kodowanie - dziwne znaki po wysyłce POST tylko w FIREFOX
piotr485
post 27.12.2013, 12:10:48
Post #1





Grupa: Zarejestrowani
Postów: 292
Pomógł: 0
Dołączył: 10.07.2009

Ostrzeżenie: (0%)
-----


Witam, strona ma jakieś 3 lata nic nie było zmieniane,
a od jakiegoś czasu zaczeły się pojawiać dziwne znaki typu: ďťż znaki te pojawiają się tylko po wysyłce metodą POST tylko w przeglądarce FIREFOX !
na Chrome i Opera nie ma takiego problemu - reszy nie testowalem

czy ktoś może to wyjaśnić ?

Zapisuje pola w formularzu w bazie za pomocą POST i wtedy na całej stronie wstawiają dziwne znaki ďťż a zamiast:
ł jest Ĺ
ż jest Ĺź

Pamiętam swego czasu Opera miała takie problemy, nie żebym zmieniał coś w przeglądarce bo patrzyłem na innych komputerach i jest to samo.

Czy ktoś ma jakiś pomysł ?
Go to the top of the page
+Quote Post
Turson
post 27.12.2013, 12:15:57
Post #2





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


http://turson.pl/blog/php/polskie-znaki-w-dokumencie-php
Go to the top of the page
+Quote Post
piotr485
post 27.12.2013, 14:41:12
Post #3





Grupa: Zarejestrowani
Postów: 292
Pomógł: 0
Dołączył: 10.07.2009

Ostrzeżenie: (0%)
-----


czytałeś wogóle mój post ?

Ten post edytował piotr485 27.12.2013, 14:41:26
Go to the top of the page
+Quote Post
Turson
post 27.12.2013, 14:51:26
Post #4





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Tak?
Cytat
zamiast:
ł jest Ĺ
ż jest Ĺź


Jakie masz kodowanie, format? Jakiś kod?
Go to the top of the page
+Quote Post
adbacz
post 27.12.2013, 14:58:13
Post #5





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

Ostrzeżenie: (0%)
-----


Jak dokonujesz tego zapisywania i wyświetlania na stronie? Wysyłasz zapytanie POST, bierzesz te wartości z pól input, zapisujesz do DB a następnie pobierasz je jeszcze raz z DB i wrzucasz na stronę?

1. Sprawdź, czy w bazie danych znaki są zapisane poprawnie.
2. Sprawdź kodowanie w bazie danych.
3. Zapisz ręczne (czyt. dopisz do zapytania te litery, któe się zamieniają w FF) do zapytania SQL i wykonaj bezpośrednio w kodzie PHP bez używania formularza.
4. Wykonujesz na tych stringach jakieą operacje? Czasami zdarza się, że niektóre funkcje w PHP rozdzielają znaki, na przykład polskie "ł", na dwa znaki, bo fizycznie faktycznie polskie "ł" składa się z dwóch innych znaków i jest zakodowane w wiekszości przypadków w UTF8 dlatego my widzimy w przeglądarce nasze "ł" zamiast krzaczków.
Go to the top of the page
+Quote Post
drake11
post 4.02.2014, 15:37:58
Post #6





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 4.02.2014

Ostrzeżenie: (0%)
-----


Czy coś się wyjaśniło w powyższym temacie? Udało się to rozwikłać?
Mam ten sam problem. Tylko w firefoxie i tylko po wysłaniu formularza metodą POST zmienia się całe kodowanie polskich znaków na stronie - wszystkie poolskie znaki wyświetlają się jako krzaki.
Dzięki za wszelkie sugestie.

Ten post edytował drake11 4.02.2014, 15:41:43
Go to the top of the page
+Quote Post
adeptofvoltron
post 5.02.2014, 16:05:49
Post #7





Grupa: Zarejestrowani
Postów: 51
Pomógł: 2
Dołączył: 4.09.2013

Ostrzeżenie: (0%)
-----


jakie masz kodowanie?
dodaj do formularza w tagu form
enctype="text/plain" jeśli przesyłasz nim tekstowe inputy.

pytanie czy w pliku w którym obsługujesz formularz masz dodane:
header('content-type: text/plain;charset=utf-8) <-pisane z palca, mogą być błędy. utf-8 to rodzaj kodowania, ty podaj takie jakie masz.

też pytanie czy pliki masz odpowiednio kodowane.
Go to the top of the page
+Quote Post
drake11
post 5.02.2014, 16:23:18
Post #8





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 4.02.2014

Ostrzeżenie: (0%)
-----


Zapodanie w formularzu enctype="text/plain" nie działało, też próbowałem.

W moim przypadku zadziałało w końcu wymuszenie kodowania w pliku php poprzez właśnie header('Content-Type: text/html; charset=utf-8');
Sposób poskutkował. Powodu dlaczego tak się działo niestety nie znalazłem.

Dzięki.
Go to the top of the page
+Quote Post
viking
post 5.02.2014, 17:28:42
Post #9





Grupa: Zarejestrowani
Postów: 6 366
Pomógł: 1115
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Mogło się tak dziać dlatego że serwer był skonfigurowany domyślnie na jakieś ISO. Pierwszą rzeczą którą powinno się robić to ustawienie kodowania właśnie przez content-type.


--------------------
Go to the top of the page
+Quote Post
adeptofvoltron
post 5.02.2014, 21:22:35
Post #10





Grupa: Zarejestrowani
Postów: 51
Pomógł: 2
Dołączył: 4.09.2013

Ostrzeżenie: (0%)
-----


krótki kurs jak to działa(w większości przypadków, chodzą bajki, że niektóre serwery są dziwnie skonfigurowane):

Serwer czyta plik .php(.html czy .css olewa) jeśli znajdzie tam jakąś funkcję header to zawarte w niej dane dołącza do nagłówka http.

Jeśli żaden header nie mówił o "Content-type" to serwer sam próbuje zgadnąć jaki ten content type jest. Czasem patrzy na rozszerzenie pliku, czasem próbuje to sam zdekodować. Ale zazwyczaj ma odgórnie ustawione co wrzucić do nagłówka o nazwie "content-type"

Wreszcie wysyłanie : wpierw Serwer wysyła nagłówek HTTP(w którym jest umieszczone content-type) a później plik. Te informacje dostaje przeglądarka.

A teraz co robi przeglądarka.

Wpierw patrzy na content type jaki dostała w HTTP. Później zaczyna czytać wysłany plik. Jeżeli dany plik przeglądarka traktuje jako text/xml (czyli np. tak powinna traktować pliki .html) to jest szansa że natknie się po drodze na taki oto tag:
  1. <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >

albo
  1. <meta charset="utf-8">


W takim przypadku przeglądarka sama decyduje czy wierzy programiście który napisał dany plik, czy też serwerowi. I tu już zachowanie przeglądarek bywa różne.

edyta: poprawienie literówek.

Ten post edytował adeptofvoltron 5.02.2014, 21:24:37
Go to the top of the page
+Quote Post
viking
post 6.02.2014, 08:34:59
Post #11





Grupa: Zarejestrowani
Postów: 6 366
Pomógł: 1115
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Nie wprowadzaj w błąd. Nagłówki HTTP są zawsze ważniejsze niż jakieś meta w dokumencie. Przeglądarki nie czytają tego bo nie muszą. Od zawsze meta było dodatkiem.


--------------------
Go to the top of the page
+Quote Post
adeptofvoltron
post 7.02.2014, 20:37:18
Post #12





Grupa: Zarejestrowani
Postów: 51
Pomógł: 2
Dołączył: 4.09.2013

Ostrzeżenie: (0%)
-----


Cytat(viking @ 6.02.2014, 08:34:59 ) *
Nie wprowadzaj w błąd. Nagłówki HTTP są zawsze ważniejsze niż jakieś meta w dokumencie. Przeglądarki nie czytają tego bo nie muszą. Od zawsze meta było dodatkiem.


5 sekund mi starczyło by sprawdzić to w i muszę sie nie zgodzić.

chrome mi zwrócił na to uwagę. wystarczyło raz ten tag meta umieścić i działały mi polskie znaki z pliku kodowanym w utf-8(localhost apache skonfigurowałem na wysłanie w naglówku iso). jak tag meta zakomentowałem to krzaczki mi wyskoczyły. naprawde łatwo to sprawdzić.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 26.05.2024 - 04:55