Mam stronę HTML, która poprawnie (kodowanie fizycznego na dysku pasuje do niego) informuje o jej typie zawartości :
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content=
"text/html; charset=utf-8">
<title> ...
Otwieranie pliku z dysku w przeglądarce (Google Chrome, Firefox) działa dobrze.
Żądając go przez HTTP, serwer internetowy wysyła inny nagłówek Content-Type:
$ curl -I http://example.com/file.html
HTTP/1.1 200 OK
Date: Fri, 19 Oct 2012 10:57:13 GMT
...
Content-Type: text/html; charset=ISO-8859-1
(patrz ostatni wiersz). Przeglądarka używa następnie ISO-8859-1, aby wyświetlić niepożądany wynik.
Czy istnieje wspólny sposób na przesłonięcie nagłówków serwera wysyłanych do przeglądarki z poziomu dokumentu HTML?
;charset=...
nagłówek http. Witryna działa bardzo dobrzeContent-Type: text/html
, różne pliki mają różne kodowania na serwerze. (Obawiam się, że to również nie jest możliwe, ponieważ myślę, że szukałem tego kilka tygodni temu, ale wynik nie był do końca ostateczny). Na wypadek, gdybyś mógł rzucić nieco światła przed siebie.Powinieneś ustawić coś takiego w swoim katalogu głównym .htaccess
źródło
Nie, nie jest to możliwe z poziomu HTML. Nagłówek odpowiedzi serwerów ma pierwszeństwo przed metatagiem dokumentu. Jak określono w 5.2.2 Określanie kodowania znaków - Specyfikacja HTML 4.01 :
Wymaga to więc konfiguracji po stronie serwera. Jednak w miarę kontynuowania rozdziału:
W moim przypadku nagłówek Content-Type serwera zawiera właściwy typ MIME, ale zły zestaw znaków .
Jak się okazało, moja konfiguracja Apache httpd ustawiła
AddDefaultCharset
włączenie, które dodawało; charset=ISO-8859-1
część. Umieszczenie w katalogu głównym stron internetowych.htaccess
następującej linii:informacje o zestawie znaków zostały usunięte:
(patrz ostatni wiersz, bez
; charset=...
części). To w połączeniu z metatagiem HTML powoduje, że wspomniana heurystyka przeglądarki przejmuje zestaw znaków od metatagu. Strona internetowa jest poprawnie odkodowana.Testowane z:
Te trzy przeglądarki miały problemy z oryginalną konfiguracją i działają teraz (wszystkie na Fedorze 17).
Po pierwsze, nie miałem problemu. Obaj woleli UTF-8 od metatagu niż ustawienie ISO-8859-1 z serwera.
Nie obsługuje UTF-8, dlatego zawsze wybiera Western (Latin1) bez względu na ustawienia serwera i metatag.
źródło
Oprócz tego, co powiedziano tutaj, spróbuję użyć tego samego zestawu znaków na wszystkich stronach - najlepiej
UTF-8
(ale jeśli prawie wszystko jestiso-8859-1
, użyj tego).Aby szybko sprawdzić zestaw znaków pliku, możesz spróbować:
Aby sprawdzić zestaw znaków wszystkich plików w drzewie, możesz spróbować:
lub (wywoływanie
file
polecenia tylko raz):Aby uzyskać podsumowanie, użyj
-b
opcjifile
polecenia (aby pominąć nazwy plików) i potokuj wyniksort | uniq -c
.źródło