Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie

  • F.West98
  • Registratie: juni 2009
  • Laatst online: 16-06 23:18

F.West98

Jongste 8 jaar-actieve user

Topicstarter
Hallo allemaal,

Zoals ik in de CC al bezig was met proberen, zit ik met een probleem(pje). Ik heb al een tijdje een auto-post-plugin voor Tweakers.
Gewoon een Greasemonkey JS die vanalles doet. Alles gaat goed. Behalve de speciale karakters, de encoding gaat fout.
Tweakers is ISO-8859-15 en AJAX POST is altijd UTF-8.
Dus, als ik een é, á, whatever post gaat het nogal mis :)

Nou had OnTrack iets cools gezegd en gedaan: OnTracK in "De Devschuur Coffee Corner - Iteratie 5" en OnTracK in "De Devschuur Coffee Corner - Iteratie 5"
Dat gaat nog steeds niet helemaal goed, in mijn lokale testje gaat het mis.
JS:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
$('#button').on("click", function() {
    var text = $('#text').val();
    text = unicode2cp1252(text);
    text = "string="+text;
    $.ajax({
        url: "URL",
        method: "POST",
        data: text,
        processData: false,
        contentType: 'application/x-www-form-urlencoded',
        beforeSend: function(jqXHR) {
            jqXHR.overrideMimeType('application/x-www-form-urlencoded');
        },
        success: function(j) {
            console.log(j);
        }
    });
});

function unicode2cp1252(str) {

    var res = [];
    var char;
    for (var i = 0, len = str.length; i < len; i++) {

        char = str.charCodeAt(i)
        if(char < 128)
            res.push(str[i]);
        else if(char < 256) {
            switch(char) {
                case 233: char = "\233"; break;
                case 225: char = "\225"; break;
                case 237: char = "\237"; break;
                case 243: char = "\243"; break;
                case 250: char = "\250"; break;
            }
            res.push(char);
        } else
            res.push("&#"+char+";");
    }
    return res.join("");
}

PHP: enkel teruggeven van de $_POST['string'] met HTML erbij (meta dingen enzo)
HTML: heeft een iso-8859-1 codering

Wie helpt mij uit de brand?

2x Dell UP2716D | i7 6700K | 32GB RAM | Samsung 850 1TB | ASUS ROG Maximus VIII Formula | GTX960 - Alles
Firesphere: Chrome is dubieus. Firefox FTW
.oisyn: Windows is net zo slecht in commandline als Linux in GUI


  • orf
  • Registratie: augustus 2005
  • Laatst online: 22:55
Werkt het niet gewoon als je de charset overschrijft?
JavaScript:
1
2
3
4
5
6
7
8
$.ajax({
    url: '...',
    contentType: 'Content-type: text/plain; charset=iso-8859-1',
    // This is the imporant part!!!
    beforeSend: function(jqXHR) {
        jqXHR.overrideMimeType('text/html;charset=iso-8859-1');
    }
});

stackoverflow

  • crisp
  • Registratie: februari 2000
  • Laatst online: 23:48

crisp

Devver

Pixelated

Volgens mij gebruikt jQuery intern gewoon encodeURIComponent, en het probleem daarvan is dat het alles converteert naar UTF8. Je kan dus beter gewoon zelf direct XHR doen zodat je daar meer controle over hebt (je zal dan zelf wel voor de juiste encoding moeten zorgen...).

Voor onze eigen ajax interfaces gebruiken we zelf ook encodeURIComponent aan de client kant, maar dan doen we wel (een specifieke) utf8_decode serverside :P

crisp wijzigde deze reactie 08-03-2014 00:01 (35%)

Intentionally left blank


  • azerty
  • Registratie: maart 2009
  • Laatst online: 20:42

azerty

McFly

quote:
crisp schreef op vrijdag 07 maart 2014 @ 23:57:
Volgens mij gebruikt jQuery intern gewoon encodeURIComponent, en het probleem daarvan is dat het alles converteert naar UTF8. Je kan dus beter gewoon zelf direct XHR doen zodat je daar meer controle over hebt (je zal dan zelf wel voor de juiste encoding moeten zorgen...).

Voor onze eigen ajax interfaces gebruiken we zelf ook encodeURIComponent aan de client kant, maar dan doen we wel (een specifieke) utf8_decode serverside :P
Voor zover ik nu zelf snel in de broncode van jquery heb gekeken, gebruiken ze alleen de encodeURIComponent als de "data" variabele die je definieert voor je ajax request geen string is.
quote: broncode jquery
// Convert data if not already a string
if ( s.data && s.processData && typeof s.data !== "string" ) {
s.data = jQuery.param( s.data, s.traditional );
}
Maar goed, dan blijft de vraag, als Jquery het niet doet voor jou, waar loopt het dan wel mis?

Btw, FWest:
The W3C XMLHttpRequest specification dictates that the charset is always UTF-8; specifying another charset will not force the browser to change the encoding.
Ik gok dat het probleem hierin zou kunnen liggen.

azerty wijzigde deze reactie 08-03-2014 00:18 (12%)


  • F.West98
  • Registratie: juni 2009
  • Laatst online: 16-06 23:18

F.West98

Jongste 8 jaar-actieve user

Topicstarter
Die had ik dus al gevonden... En dat is ook net het probleem.
Daarom dus ook dat linkje naar OnTrack, hij had een idee. Lijkt niet helemaal goed te werken.

@crisp; cheaters :+ Kunnen jullie dat ook inbouwen voor bericht post? O-)

Alternatief is natuurlijk een iframe die post :S

2x Dell UP2716D | i7 6700K | 32GB RAM | Samsung 850 1TB | ASUS ROG Maximus VIII Formula | GTX960 - Alles
Firesphere: Chrome is dubieus. Firefox FTW
.oisyn: Windows is net zo slecht in commandline als Linux in GUI


  • Maximized
  • Registratie: april 2004
  • Laatst online: 20:39

Maximized

En niet minimized

offtopic:
waarom gebruikt T.net _in godsnaam_ niet gewoon UTF-8 zoals de rest van de wereld eigenlijk? 8)7

  • F.West98
  • Registratie: juni 2009
  • Laatst online: 16-06 23:18

F.West98

Jongste 8 jaar-actieve user

Topicstarter
quote:
Maximized schreef op zaterdag 08 maart 2014 @ 14:55:
offtopic:
waarom gebruikt T.net _in godsnaam_ niet gewoon UTF-8 zoals de rest van de wereld eigenlijk? 8)7
offtopic:
Legacy

2x Dell UP2716D | i7 6700K | 32GB RAM | Samsung 850 1TB | ASUS ROG Maximus VIII Formula | GTX960 - Alles
Firesphere: Chrome is dubieus. Firefox FTW
.oisyn: Windows is net zo slecht in commandline als Linux in GUI


  • R4gnax
  • Registratie: maart 2009
  • Laatst online: 18-06 22:26
quote:
PHP bedoel je?

Zowat alle andere web-facing talen kunnen immers onderhand deftig omgaan met UTF-8, UTF-16 of UCS-2. PHP is de laatste hold-out waar Unicode encodering enkel als een slecht interopereerbare bij elkaar gehackte library opgeleverd is. Maar ja; da's niets nieuws voor PHP, want dat platform hangt wat dat betreft bijna letterlijk als kauwgom aan elkaar.

  • crisp
  • Registratie: februari 2000
  • Laatst online: 23:48

crisp

Devver

Pixelated

quote:
Onder andere dat, en gigabytes aan data die geconverteerd moet worden...

Intentionally left blank

quote:
R4gnax schreef op woensdag 12 maart 2014 @ 22:04:
[...]


PHP bedoel je?

Zowat alle andere web-facing talen kunnen immers onderhand deftig omgaan met UTF-8, UTF-16 of UCS-2. PHP is de laatste hold-out waar Unicode encodering enkel als een slecht interopereerbare bij elkaar gehackte library opgeleverd is. Maar ja; da's niets nieuws voor PHP, want dat platform hangt wat dat betreft bijna letterlijk als kauwgom aan elkaar.
Ben ik het niet mee eens. I programmeer ook in C++ en dan met Embarcadero. Dan zijn er 3 types: String, UnicodeString en AnsiString.
Vervolgens heb je tchar.h en hoppa, alles door elkaar als je niet oplet.
En dan communiceren en converteren naar UTF-8 voor een XML interface.
Halleluja!

Maak je niet druk, dat doet de compressor maar


  • R4gnax
  • Registratie: maart 2009
  • Laatst online: 18-06 22:26
quote:
DJMaze schreef op donderdag 13 maart 2014 @ 18:50:
[...]


Ben ik het niet mee eens. I programmeer ook in C++ en dan met Embarcadero. Dan zijn er 3 types: String, UnicodeString en AnsiString.
Vervolgens heb je tchar.h en hoppa, alles door elkaar als je niet oplet.
En dan communiceren en converteren naar UTF-8 voor een XML interface.
Halleluja!
C++ valt in het algemeen dan ook niet onder web-facing talen.
Pagina: 1


Call of Duty: Black Ops 4 HTC U12+ dual sim LG W7 Google Pixel 3 XL OnePlus 6 Battlefield V Samsung Galaxy S9 Dual Sim Google Pixel 3

Tweakers vormt samen met Tweakers Elect, Hardware.Info, Autotrack, Nationale Vacaturebank en Intermediair de Persgroep Online Services B.V. © 1998 - 2018 Hosting door True

*