Autor | Zpráva | ||
---|---|---|---|
xlifer Profil |
Přecházel jsem na Windows 10 a přeinstaloval jsem si i Apache server, ale mám teď problém s kódováním serveru, který jak to vypadá posílá HTTP hlavičku s kódováním UTF-8 jako výchozí.
Potřebuji server nastavit tak, aby "neposílal" výchozí kódování v hlavičce, ale aby si každá stránka přebrala kódování, které je uvedeno v HTML meta značce stránky. Nevím co do konfiguračního souboru Apache httpd.conf nebo PHP php.ini napsat/změnit? Mám verzi Apache 2.4.18/PHP 5.6.16. |
||
nightfish Profil |
#2 · Zasláno: 31. 1. 2016, 15:56:30
AddDefaultCharset off |
||
xlifer Profil |
Tak problém je od verze PHP 5.6.0, kde je výchozí hodnota kódování UTF-8.
A to i v případě, kdy je nastavení "default_charset" v php.ini zakomentováno: ;default_charset = "UTF-8" nebo ponecháno jako prázdná hodnota: default_charset = V obou případech je v PHP Core "default_charset" UTF-8. Na rozdíl od starších verzí PHP, kde je hodnota v případě neuvedení charset "no value". Jediné řešení je do všech .php souborů projektu doplnit hlavičku: header("Content-Type: text/html; charset=XXX"); U .html souborů se kódování vždy z META hlavičky. Problém je v tom, že kdo používal kódování windows-1250, jako například já :-(, tak při přechodu na verzi PHP >= 5.6.0 musí řešit tento problém přes header hlavičku nebo provozovat více verzí PHP. Zkoušel jsem, zda nejde přebít výchozí kódování UTF-8 přes .htaccess, ale to se mi nedaří. |
||
Časová prodleva: 3 měsíce
|
|||
Davex Profil |
V PHP 7 stačí v php.ini nastavit
default_charset = "" a charset se přestane do hlavičky Content-Type přidávat.
Nicméně default_charset se v dalších konfiguračních volbách používá jako výchozí hodnota, pokud nejsou nastavené, takže jeho nevyplnění může mít další nežádoucí efekty. Případně některé funkce, které tuto hodnotu používají, mohou mít neočekávané výsledky (typicky třeba funkce htmlspecialchars() ), ale nijak detailně jsem to netestoval.
|
||
Časová prodleva: 1 měsíc
|
|||
host Profil * |
#5 · Zasláno: 13. 6. 2016, 23:15:59
Davexuv prispevek funguje i pro verzi 5.6.0 a vyssi.
|
||
host Profil * |
#6 · Zasláno: 14. 6. 2016, 20:33:39
Ale ma problem se zminenou funkci htmlspecialchars(). Nevite, jak toto poresit? Diky.
|
||
Kajman Profil |
#7 · Zasláno: 15. 6. 2016, 09:32:27
host:
Nastavíte třetí parametr té funkce, protože defaultně bere ini_get("default_charset"). |
||
Davex Profil |
#8 · Zasláno: 15. 6. 2016, 18:28:43
host:
„Ale ma problem se zminenou funkci htmlspecialchars().“ Předpokládám, že nebude problém jen s touto funkcí při použití kódování windows-1250 nebo iso-8859-2 na webu provozovaném s PHP 5.6 a 7.0+. Pokud je web v kódování UTF-8, tak bych tam výchozí konfiguraci neměnil. Pro windows-1250 a iso-8859-2 by mělo stačit upravit konfiguraci PHP takto (je to přenesená výchozí konfigurace PHP 5.3, 5.4 a 5.5): [PHP] default_charset = "" internal_encoding = ISO-8859-1 input_encoding = ISO-8859-1 output_encoding = ISO-8859-1 |
||
Časová prodleva: 1 rok
|
|||
xlifer Profil |
Na localhostu, kde je provozováno více projektů s různým kódováním se mi v praxi nejvíce osvědčilo řešení od Davexa, nastavit nedoporučované default_charset = "". Je nutné pak myslet na funkce jako htmlspecialchars apod. jak se píše výše.
Protože toto nastavení není správné, když je hodnota charset prázdná, tak mě napadlo, zda není nějaká možnost nastavit jiný charset aspoň pro každý virtualhost samostatně? Tzn. že bych nechal výchozí nastavení UTF-8, ale u projektů, kde je např. kódování windows-1250, bych nastavil pro ten konkrétní virtualhost jiný charset nebo vypnul výchozí UTF-8. Nepřišel jsem na způsob jak to nastavit, buď to vůbec nelze nebo nevím jak. |
||
Časová prodleva: 8 let
|
0