Autor Zpráva
ServIT
Profil
Zdravím, lidi ...

Přetahuju stránky ze starého serveru ( APACHE 2.2.21, PHP 5.3.8 ) na nový ( APACHE 2.4.33, PHP 7.3.2 ).
Na stránkách intenzivně používám ajax, a ten přestal fungovat správně.
Docela mi trvalo, než jsem si ve firefoxu všiml rozdíl v XML odpovědi. Kód, který generuje XML odpověď pro zpracování javascriptem před odesláním odpovědi nastavuje hlavičku
header( "text/xml");

starý server tuto hlavičku odešle, nový ji modifikuje na "text/xml; charset=utf-8".
JS funkce, která obdrží odpověď serveu striktně trvá na původní hlavičce.

Kód funkce není problém upravit, ale je pro mne problém pochopit, proč se toto
děje, osobně podezírám ze "svévole" Apache, možná nějaké to nastavení, které jsem přehlédl.

Má někdo rychlý nápad ? Mé hledání nijak slavně nedopadlo.

Předem díky za nápovědu.
M.
Joker
Profil
ServIT:
Viníkem zřejmě není Apache, ale PHP.
Podle zdrojáku PHP se od PHP 5.6 k hlavičce Content-Type automaticky připojí charset v případě, že jsou splněné tři podmínky:
• MIME typ začíná „text/“,
• hlavička neobsahuje charset a
• je nastaveno default_charset

Napadají mě čtyři možnosti:
1. Upravit klientskou stranu tak, aby to fungovalo i s charset.
2. Pokud by to nějak pomohlo, nastavovat si svůj charset.
3. Šlo by to obejít tak, že se před voláním header změní default_charset na NULL (a ideálně nejdřív původní hodnota uloží do proměnné a po volání header zase obnoví zpátky).
4. Nastavit MIME typ application/xml (pokud to s ním bude fungovat), tam se charset (snad) nepřidá.
ServIT
Profil
Joker:
Zdravím, a děkuji za rychlou, výstižnou silvestrovskou odpověď.

Mně zajímalo, proč se to děje, abych předešel dalším případným problémům. Soubory na obou serverech jsou prakticky totožné, a nebylo mi jasné, proč na jednom serveru je hlavička správně a na druhém přepsaná.

V tom ajax-handleru právě content-type v hlavičce rozhoduje, co se se zaslanými daty provede dále.
používám zatím dva text/plain a text/xml .. nic dalšího v plánu není ...

Kód jsem tedy upravil ... namísto "==" na "startsWith", to nebyl problém. Když ale nerozumím tomu co dělám, pak si nemůžu být jist, že to dělám správně, zda mně podobný problém nevyučí někde jinde .. .

Takže ještě jednou díky za vysvětlení,

všem úspěšný nový rok, a moc to s oslavami nepřehánějte :)
M.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0