XMLHTTP

N

Nemlah

Hello,
I am working on a site which utilizes PHP/JS and the new found XMLHTTP
frenzy to update dynamically.
WHile the whole mechanism works beautifull, i can't get to display
greek Characters correct (They show up as ?).
I tried following solutions to set the XML:lang or simple lang
parameter in the div to el, but that didn't help.. Greek text in the
surrounding page is showing up correct..
Here is the code i am using:
The JS File
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}

function loadFragmentInToElement(fragment_url, element_id) {
var element = document.getElementById(element_id);
element.innerHTML = 'Loading ...';
xmlhttp.open("GET", fragment_url);
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
element.innerHTML = xmlhttp.responseText;
}
}
xmlhttp.send(null);
}

The client PHP:
<?php
include ("../_mssqlconnect.php");
include ("get_login_data.php");
?>
<script>
function offerDetails(id)
{
loadFragmentInToElement('sc_ogdetails.php?ogid='+id, 'ogDetails');
}
</script>

//......

?>
<span lang="el" id="ogDetails" align="left"></span>

The server PHP:
<?php
include ("../_mssqlconnect.php");

//.......

echo "<div lang=\"el\">
<table class='sp_table' width=300 align=center>
<tr>
<td align=center><b>{here the greek Text which doesnt come
out right}<b></td>
</tr>
</table></div>";

ANy hints?
thanks
 
M

Martin Honnen

Nemlah wrote:

I am working on a site which utilizes PHP/JS and the new found XMLHTTP
frenzy to update dynamically.
WHile the whole mechanism works beautifull, i can't get to display
greek Characters correct (They show up as ?).
element.innerHTML = xmlhttp.responseText;

responseText is unreliable when it comes to encodings other than UTF-8
or UTF-16. So if you want to use responseText then make sure your PHP
page sends UTF-8 encoded text. Or do not use responseText but exchange
XML and use responseXML, then if your PHP page sends XML with the proper
XML declaration the XML parser should recognize the encoding and
properly decode characters. But XML parsers are only required to support
the encodings UTF-8 and UTF-16 thus if you want to make sure your page
works with as many browsers as possible then you should use one of those
encodings for your XML sent.
 
M

Martin Honnen

Vasilis Dimos wrote:

I read about the UTF-8 encoding of the strings sent via responseText,
and i hoped i could setRequestHeader to the correct charset.. Doesn't
seem to work though..(unknown exception error)

The PHP script needs to send UTF-8 encoded text so I am not sure what
you are trying to achieve with setRequestHeader on the client.
 
M

Martin Honnen

Vasilis Dimos wrote:

I am trying the XML approach you suggested. Actually i am writing
manually an XML string and echoing it. All i get so far though is a
[object] in IE and nothing in firefox.

I do not speak Greek so I am relying on babelfish for this. It
translates English
Who is god?
to the following:
Ποιος είναι Θεός;

Now assuming you are encoding your PHP pages as ISO-8859-7 which is an
8-bit encoding allowing you to use Latin letters and Greek letters you
could send your XML as ISO-8859-7 and then rely on the XML parser to
decode that. As said XML parsers do not need to understand that encoding
but my tests here with MSXML/IE 6, Mozilla and with Opera 8.00 beta show
they do understand that.
I have used the following PHP test page encoded as ISO-8859-7:

<?php
$text = 'Ποιος είναι Θεός;';
$xmlSource = '<?xml version="1.0" encoding="ISO-8859-7"?>' . "\r\n";
$xmlSource .= '<text xml:lang="gr">' . $text . '</text>';
header('Content-Type: application/xml');
echo $xmlSource;
?>

Then client-side script reads the XML sent as follows:

function getText (url, callback) {
var httpRequest;
if (typeof XMLHttpRequest != 'undefined') {
httpRequest = new XMLHttpRequest();
}
else if (typeof ActiveXObject != 'undefined') {
httpRequest = new ActiveXObject('Microsoft.XMLHTTP');
}
if (httpRequest) {
httpRequest.open('GET', url, true);
httpRequest.onreadystatechange = function () {
if (httpRequest.readyState == 4 && httpRequest.responseXML) {
var xmlDocument = httpRequest.responseXML;
if (xmlDocument.documentElement &&
xmlDocument.documentElement.firstChild) {
callback(xmlDocument.documentElement.firstChild.nodeValue);
}
}
};
httpRequest.send(null);
}
}

function insertTextIntoBody (text) {
var p;
if (document.createElement && (p = document.createElement('p'))) {
p.appendChild(document.createTextNode(text));
document.body.appendChild(p);
}
}

getText('test2004123101.php', insertTextIntoBody);

and then the tested browsers show

Ποιος είναι Θεός;

in the HTML page.


Or use the PHP extension iconv if you have that available
http://de3.php.net/manual/en/function.iconv.php
to convert your 8-bit PHP strings to UTF-8 as needed.
 
B

Börni

Vasilis said:
Hey thanks for the fast reply,
I read about the UTF-8 encoding of the strings sent via responseText,
and i hoped i could setRequestHeader to the correct charset.. Doesn't
seem to work though..(unknown exception error)
I am trying the XML approach you suggested. Actually i am writing
manually an XML string and echoing it. All i get so far though is a
[object] in IE and nothing in firefox.
Apparently the responseXML returns an Document object. How can i print
it? I am not really interested right now in XML magic, but if wrapping
the data in XML helps i am willing to do that..
Any further hints..?
Thanks

I had a similar problem not long ago.
i past again some php code which should help you.

<?php
$xmlString = '<?xml version="1.0" encoding="UTF-8"?>' . "\r\n";
$xmlString .=
'<root><text xml:lang="de">Umlaute: ä, ö, ü</text></root>';
header('Content-Type: application/xml');
echo utf8_encode($xmlString);
?>

As you can see the xml string is build also manually, but is utf8
encoded before echoed.

In the Javascript again, you can access the responseXML object with the
normal W3C DOM Methods.

Have a look a this page for a good intro:
http://www.quirksmode.org/dom/intro.html
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,065
Latest member
OrderGreenAcreCBD

Latest Threads

Top