Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[Firefox3] XMLHTTPRequest met andere encoding dan UTF-8

Pagina: 1
Acties:

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Topicstarter
Ik krijg het niet voor elkaar om Firefox3 een XMLHTTPRequest te laten posten met een andere encoding dan UTF-8. Volgens mij is het gerelateerd aan deze bugfix.

Hieronder een verkleinde testcase; wie helpt me op weg?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?PHP
if ($_SERVER['REQUEST_METHOD'] == 'POST')
        die($_SERVER['CONTENT_TYPE']);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="nl" lang="nl">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=ISO-8859-15" />
<title>Firefox bug</title>
</head>
<body>
<pre id="res">result</pre>
<script type="text/javascript">
var req = new XMLHttpRequest();
req.open('POST', '/ff3-xmlhttp.php', false);
req.setRequestHeader('Content-type', 'application/firefox-bug; charset=ISO-8859-15');
req.send('');
document.getElementById('res').innerHTML = req.responseText;
</script>
</body>
</html>


Mijn Firefox 3.0.3 stuurt uiteindelijk dit naar de server: 'application/firefox-bug; charset=UTF-8'; dus de content-type komt goed door; maar de charset wordt er vanaf gesloopt. Is dit fixbaar door mij; of is dit een bug?

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 22:33

crisp

Devver

Pixelated

Je stuurt geen data (nou ja, een lege string); volgens de specificatie wordt dan dit gedaan:
Encode data using UTF-8 for transmission.

If a Content-Type header is set using setRequestHeader() set the charset parameter of that header to UTF-8.
XHR en non-UTF8 is een hell; de escaping methods in javascript (encodeURI*) converteren ook allemaal naar UTF8, dus als je per-sé latin9 wilt blijven gebruiken kan je beter serverside utf8-decoden.

Intentionally left blank


  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Topicstarter
Hmm; dat had ik nog niet gevonden; evenwel ligt het daar niet aan; als ik a=b doorstuur, heb ik precies hetzelfde probleem. Blijkbaar heb ik de testcase iets teveel gestript ;)

En de serverside oplossing wilde ik eigenlijk nog even omzeilen; vooral omdat dit gedrag zo bizar is dat het bijna wel een bug moet zijn

[ Voor 28% gewijzigd door Spider.007 op 26-10-2008 15:43 ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 22:33

crisp

Devver

Pixelated

Spider.007 schreef op zondag 26 oktober 2008 @ 15:39:
Hmm; dat had ik nog niet gevonden; evenwel ligt het daar niet aan; als ik a=b doorstuur, heb ik precies hetzelfde probleem. Blijkbaar heb ik de testcase iets teveel gestript ;)
Ook dan geldt:
data is not a DOMString or Document

Use the stringification mechanisms of the host language on data and treat the result as if data is a DOMString. Or, if this fails, act as if the data argument is null.
en voor DOMString wordt de charset op UTF8 gezet.

Intentionally left blank


  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Topicstarter
Volgens mij is dat wel een DOMString; toch? Maar je hebt gelijk, er staat er in de specs zeer expliciet dat hier altijd UTF-8 voor gebruikt dient te worden:
data is a DOMString

Encode data using UTF-8 for transmission.
If a Content-Type header is set using setRequestHeader() set the charset parameter of that header to UTF-8.
Dat betekent dus gewoon dat, zelfs al is alles ISO-8859-15; dat de XMLHTTPRequests op geen enkele manier gelijk te trekken zijn... dat is wel redelijk vervelend

Misschien kan ik een Document gaan doorsturen; dan zou data.inputEncoding moeten worden gebruikt? De vraag is dan alleen of alle browsers de specs volgen op dat punt

[ Voor 17% gewijzigd door Spider.007 op 26-10-2008 16:25 ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 22:33

crisp

Devver

Pixelated

Spider.007 schreef op zondag 26 oktober 2008 @ 16:21:
Volgens mij is dat wel een DOMString; toch? Maar je hebt gelijk, er staat er in de specs zeer expliciet dat hier altijd UTF-8 voor gebruikt dient te worden:
[...]
Dat betekent dus gewoon dat, zelfs al is alles ISO-8859-15; dat de XMLHTTPRequests op geen enkele manier gelijk te trekken zijn... dat is wel redelijk vervelend
Maar zelfs als het mogelijk zou zijn om zelf de encoding te bepalen zou het nog betekenen dat je je eigen encoding moet gaan schrijven aangezien escape() niet RFC-compliant is en encodeURI* dus expliciet converteren naar UTF8 ;)

Intentionally left blank


  • DiSiLLUSiON
  • Registratie: September 2000
  • Laatst online: 02-10 09:07
Waarom wil je eigenlijk een andere encoding gebruiken dan UTF-8? Het lijkt mij dat je, met het gebruik van een andere charset, alleen extra moeilijkheden creeërt; UTF-8 is er niet voor niets.

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Topicstarter
crisp schreef op zondag 26 oktober 2008 @ 16:26:
[...]

Maar zelfs als het mogelijk zou zijn om zelf de encoding te bepalen zou het nog betekenen dat je je eigen encoding moet gaan schrijven aangezien escape() niet RFC-compliant is en encodeURI* dus expliciet converteren naar UTF8 ;)
Maar het is toch wel raar dat een ISO-8859-15 webpage met ISO-8859-15 content geen ISO-8859-15 request kan doen; juist dan moet de content dus geconverteerd gaan worden van ISO-8859-15 naar UTF-8?

Daarnaast, je browser kan dit toch gewoon? Er zit in Firefox gewoon een Character Encoding selector die dit al doet; dus waarom de XMLHTTPRequest hier geen gebruik van zou kunnen maken is mij een raadsel
DiSiLLUSiON schreef op maandag 27 oktober 2008 @ 09:40:
Waarom wil je eigenlijk een andere encoding gebruiken dan UTF-8? Het lijkt mij dat je, met het gebruik van een andere charset, alleen extra moeilijkheden creeërt; UTF-8 is er niet voor niets.
Zodra PHP UTF8 bruikbaar gaat ondersteunen ga ik over ;)

[ Voor 22% gewijzigd door Spider.007 op 27-10-2008 13:35 ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • DiSiLLUSiON
  • Registratie: September 2000
  • Laatst online: 02-10 09:07
Spider.007 schreef op maandag 27 oktober 2008 @ 13:34:
[...]
Zodra PHP UTF8 bruikbaar gaat ondersteunen ga ik over ;)
Good point. :)
Pagina: 1