Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kodowanie - dziwne znaki po wysyłce POST tylko w FIREFOX
Forum PHP.pl > Forum > PHP
piotr485
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ł ?
piotr485
czytałeś wogóle mój post ?
Turson
Tak?
Cytat
zamiast:
ł jest Ĺ
ż jest Ĺź


Jakie masz kodowanie, format? Jakiś kod?
adbacz
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.
drake11
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.
adeptofvoltron
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.
drake11
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.
viking
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.
adeptofvoltron
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.
viking
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.
adeptofvoltron
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ć.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.