Autor | Zpráva | ||
---|---|---|---|
xlifer Profil |
#1 · Zasláno: 17. 6. 2015, 17:27:18
I když nastavím "Content-Type: text/html; charset=windows-1250" do hlavičky odesílaných dat v JS níže, tak vždy na výstupu v cílovém skript.php je kódování v UTF-8 i přes to, že mám uvedený ve skript.php header("Content-Type: text/html; charset=Windows-1250"). Jen upřesním, že JS je v kódování windows-1250, stejně tak předávaná data do parametru text=
parametry = "?text="+encodeURIComponent("nějaký text v kódování windows-1250"); setTimeout(function () { send_xmlhttprequest(function (xmlhttp) { if (xmlhttp.readyState == 4) { divbox.innerHTML = xmlhttp.responseText; } }, 'POST', 'skript.php', parametry, {"Content-type": "application/x-www-form-urlencoded", "Content-length": parametry.length}); }, 1); Pročetl jsem zde na fóru nějaké vlákna, kde se řeší kódování AJAJxu, ale řešení jsem nenašel ani nevyčetl, zda to lze nebo vubec nelze řešit? |
||
_es Profil |
xlifer:
A ako vyzerá funkcia send_xmlhttprequest ? Alebo, odkiaľ si ju prebral? Stránka je v akom kódovaní? Problém je v čom - nejaké znaky zle zobrazované?
|
||
Časová prodleva: 3 dny
|
|||
Chamurappi Profil |
Reaguji na xlifera:
Problém není v tom, co deklaruješ. Funkce encodeURIComponent používá vždy UTF-8, protože to je oficiálně standardní kódování všech URL.
Kdysi dávno jsem si napsal vlastní obdobu, která umí převod do windows-1250 :
function encodeURIComponentWindows1250(c) { var windows1250 = "\u20ac\u0081\u201a\u0083\u201e\u2026\u2020\u2021\u0088\u2030\u0160\u2039\u015a\u0164\u017d\u0179\u0090\u2018\u2019\u201c\u201d\u2022\u2013\u2014\u0098\u2122\u0161\u203a\u015b\u0165\u017e\u017a\u00a0\u02c7\u02d8\u0141\u00a4\u0104\u00a6\u00a7\u00a8\u00a9\u015e\u00ab\u00ac\u00ad\u00ae\u017b\u00b0\u00b1\u02db\u0142\u00b4\u00b5\u00b6\u00b7\u00b8\u0105\u015f\u00bb\u013d\u02dd\u013e\u017c\u0154\u00c1\u00c2\u0102\u00c4\u0139\u0106\u00c7\u010c\u00c9\u0118\u00cb\u011a\u00cd\u00ce\u010e\u0110\u0143\u0147\u00d3\u00d4\u0150\u00d6\u00d7\u0158\u016e\u00da\u0170\u00dc\u00dd\u0162\u00df\u0155\u00e1\u00e2\u0103\u00e4\u013a\u0107\u00e7\u010d\u00e9\u0119\u00eb\u011b\u00ed\u00ee\u010f\u0111\u0144\u0148\u00f3\u00f4\u0151\u00f6\u00f7\u0159\u016f\u00fa\u0171\u00fc\u00fd\u0163\u02d9"; return String(c).replace(/([\u0000-\u007F]+)|[\u0080-\uFFFF]/g, function(m, ascii) { if(ascii) return encodeURIComponent(m); var pos = windows1250.indexOf(m); return (pos > -1) ? "%" + (pos + 128).toString(16) : "%26%23" + m.charCodeAt(0) + "%3B"; }); } Ale už ji nepoužívám, protože jsem zjistil, že server – alespoň v mém případě – pochopí data enkódovaná v UTF-8, když nastavím Content-Type: application/x-www-form-urlencoded; charset=utf-8 .
Edit: Oprava překlepu – enkódovaná, ne nekódovaná. Aha, ona mi to sama opravuje kontrola pravopisu :-) |
||
snazimse Profil |
#4 · Zasláno: 22. 6. 2015, 09:41:09
Chamurappi:
„Ale už ji nepoužívám, protože jsem zjistil, že server – alespoň v mém případě – pochopí data nekódovaná v UTF-8, když nastavím Content-Type: application/x-www-form-urlencoded; charset=utf-8.“ Co to znamená pochopí? Jakože je umí zpracovat? Je vůbec vhodné dneska, ještě používat jiné kodování než UTF-8 v Evropě? Díky |
||
_es Profil |
#5 · Zasláno: 22. 6. 2015, 19:16:58
Okrem toho, použitie funkcie
setTimeout s oneskorením 1 ms vyzerá veľmi pofidérne - asi to je pokus o nejakú „opravu“ obvyklého správania.
|
||
xlifer Profil |
#6 · Zasláno: 23. 6. 2015, 12:17:23
Takže, když se nebudeme bavit o změně kódování celého webu, tak je asi jediné řešení převést UTF-8 kódování až uvnitř skriptu přes funkci iconv(); z UTF-8 na Windows-1250.
|
||
Chamurappi Profil |
#7 · Zasláno: 23. 6. 2015, 13:34:41
V mém příspěvku byl překlep – chtěl jsem napsat data enkódovaná v UTF-8, ne nekódovaná.
Reaguji na snazimse: „Co to znamená pochopí? Jakože je umí zpracovat?“ Jo. Prostě rozumí tomu charset u v hlavičce Content-Type a vezme URL-enkódovaný vstup jako UTF-8, přestože stránka jinak běží v jiném kódování.
V mém případě šlo o IIS, netuším, jak se k tomu staví Apache a PHP. „Je vůbec vhodné dneska, ještě používat jiné kodování než UTF-8 v Evropě?“ Myslím, že je to celkem jedno. Pro češtinu je datově nejúspornější kódování windows-1250 , ale úspora v řádu bajtů zpravidla nestojí za řeč. U nového webu bych nejspíš zvolil UTF-8, u něčeho již existujícího se zpravidla nevyplácí kódování dodatečně měnit.
Reaguji na xlifera: „tak je asi jediné řešení“ Čemu nerozumíš na příspěvku [#3]? Dostal jsi na stříbrném podnose hotové řešení… má snad ta moje funkce nějaký problém? |
||
xlifer Profil |
Chamurappi:
„Čemu nerozumíš na příspěvku [#3]? Dostal jsi na stříbrném podnose hotové řešení… má snad ta moje funkce nějaký problém?“ Pochopil jsem to tak, že už funkci nepoužíváš, takže to není vhodné řešení i kvůli tomu důvodu, který tam uvádíš. Nemyslel jsem to nijak jinak a za řešení samozřejmě děkuji. A kdyby jsi se měl rozhodnout jestli data převést přes JS (tvoje funkce) a odeslat již hotové data nebo až ve skriptu přes iconv, tak k čemu by jsi se příkláněl a z jakého důvodu? Díky za názor. |
||
Časová prodleva: 9 let
|
0