Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: JQuery / AJAX / charset ongelma(?)

Matso [26.02.2009 10:04:02]

#

Joo elikkä jqueryllä teen post-kyselyä, ja sieltä tulee vastauksena xhtml-muotosta dataa. Operalla ja Firefoxilla toimii mainiosti, mutta IE6:ssa ja 7:ssa ei näy oikein, alkuun tulee jotain kysymysmerkkejä ja jotku erikoismerkit, esim Ü ei näy oikein, eli siitä päättelisin, että IE ei vastaanota dataa utf-8:na.

- PHP-scriptin alussa, johon post-kysely tehdään on määritelty charsetiksi utf-8:

header('Content-type: text/html; charset=utf-8');

- Kaikki tiedostot on utf-8:a
- Kyselyä tekevän tiedoston xhtml:n alussa on määritelty merkistökoodaukseksi utf-8
- Tietokanta josta data haetaan php:llä, on utf-8:a
- Kokeilin jopa laittaa ton palautettavan xhtml-datan alkuun:

<?xml version="1.0" encoding="UTF-8"?>

..ja ei auta!

Miks hemmetissä IE ei vastaanota sitä post-requestin vastausta UTF-8:na??


Muoks.
Hmm... itseasiassa erikoismerkit toimii oikein muualla, paitsi tietokannasta tulevassa datassa :o. Olen kuitenkin määritellyt myös tietokantayhteyden merkistöksi utf8

B_R_H [26.02.2009 10:48:03]

#

Ootko varma tuosta kannan merkistöstä? Sitä tarkistelisin jollakin.

Matso [26.02.2009 14:21:51]

#

Aha joo mulla olikin toisessa paikkaa tietokantaan yhdistäminen js:llä haetussa sisällössä, jossa ei oltu määritelty tietokantayhteyden merkistöksi utf8:a.

No, tämä ei näköjään ratkaissutkaan alkuperäistä ongelmaani, toisinkun luulin.

walkout_ [27.02.2009 18:14:49]

#

Moips.. IE vaihtaa ohjelmallisesti AJAXilla haetun datan Char setin..

Olen testaillut itse samaa, ja esim. kun dataa tallenetaan ja haetaan AJAX editorilla niin seuraava ainakin auttoi TinyMCE:ssä

Niin ja tämä oli eräällä LightBox-kloonilla ladattu iframe, jossa oli sit iframessa toi TinyMCE

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
		<?php if (stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE')) { ?>

		<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />

		<?php } else { ?>

		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

		<?php  } ?>

sit sihen TinyMCE:n formiin..

<?php

       if (stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE')) {

	echo utf8_decode(utf8_decode($ajaxData));

	} else {

	echo $ajaxData;

	}
?>

Siis jotekin näin.. en muista oliko tämä oikein mutta yritän korjaa.. meinaan kun tekee ekan tallennuksen kaikki toimii mutta kun tekee uuden tallennuksen niin € merkit häviää

Niin ja juu toi pitää kahteen kertaan encoodata, koska IE lataa tiedostosta datan UTF-8:na ja sit encooda sen jollain mikkisofta encoodauskella ja jotain ihan kummaa..

Ai niin ja jotain kummaa tuli ydessä testauksessa että isot kirjaimet ÄÖÅ ei toimi ja niiden tilalle tulee ihme merkkejä. Eli siis mikkisofta kai yritti tehdä mun teksteistä venäjää.

Tätä olen sitten testannut vain tiedostojen kanssa en tietokannan.

walkout_ [28.02.2009 09:35:49]

#

Löysin ratkaisun.

Ongelma on seuraava.
MSIE:ssä on Unicode UTF-8
Kun taas FireFixissa joku muu.
MSIE encoodaa ilmeisesti ohjelmallisesti Unicodeen
AJAX ei tunne vain merkistön jota IE:ssä ei ole

Ongelma ratkeaa sillä
Että AJAXilla ladattavan datan metatagi on UTF-8
Tallennus vaiheessa data encodataan Unicode-to-UTF functiolla, joka löytyy PHP.netistä. Vai oliko UTF-to-Unicode mut testaa ite
Näin homma toimii FireFoxissa ja IE:ssä samallailla.

Yksi IE:n ongelma on että se laitaa vanhan AJAX-datan cachesta vaikka header on no-cache.. mutta se pitäisi ratketa sillä että ajax-latauksessa on random ?rand=19288373736 muttuja

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta