[js/php]versturen van japanse tekens via http-post

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • link0007
  • Registratie: Augustus 2006
  • Niet online
Op mijn website kunnen mensen via javascript tags toevoegen aan items. Dit gaat via http post requests.

Nu heb ik een probleem dat wanneer mensen japanse tags toevoegen, de karakters verkeerd aankomen bij de server.

Als eerste hebben we deze code:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function promptTag(scene_id)
{
    var tag = 
    prompt(unescapeHtml(text.enter_a_new_tag)+". " +
    unescapeHtml(text.please_only_use_words)+":", "");

    if (tag === null || tag === "")
    {
        return;
    }
    else 
    {
        addTag(scene_id,tag);
    }
}

Ik vul bijvoorbeeld dit in als tag:

分別

volgens firebug's javascript debugger zit dit ook in de variabele 'tag'.

Dan krijgen we de functie addTag:

JavaScript:
1
2
3
4
5
6
7
8
9
10
function addTag(scene_id,tag)
{
    connection_tag = ajaxRequest();
    globalTagSceneID = scene_id;
    globalTagName = tag;
    connection_tag.onreadystatechange = feedbackTag;
    connection_tag.open('post','add_tag.php', true);
    connection_tag.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    connection_tag.send('scene_id='+scene_id+'&tag_name='+tag);
}


Ook hier is de variabele 'tag' nog correct.

de functie feedbackTag schrijft de tag dan erbij in de lijst met tags op de pagina (dus vanuit de variabele globalTagName, niet vanuit de database!). De tag ziet er dan in de pagina ook nog correct uit.

Wanneer je dan echter refresht, en de tag dus vanuit de database getoond word, ziet hij eruit als:

分別


Dus hij is de codering een beetje kwijt geraakt? :X


Wanneer ik dan via firebug bekijk wat hij naar de server gestuurd heeft, staat daar inderdaad ook 分別. Dus het gaat al mis in de javascript.

Hoe kan ik dit probleem verhelpen? Ik heb gezocht op een goede javascript functie om het naar entities om te zetten (utf-8 via ascii), maar die zijn er blijkbaar niet?

Of valt het misschien te verhelpen via php?

IF IF = THEN THEN THEN = ELSE ELSE ELSE = IF;


Acties:
  • 0 Henk 'm!

  • ProperChaos
  • Registratie: December 2007
  • Niet online
Je zou het kunnen versturen met url-encoding of base64.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
link0007 schreef op maandag 01 juni 2009 @ 17:45:
Wanneer je dan echter refresht, en de tag dus vanuit de database getoond word, ziet hij eruit als:
Euh, heb je al eens gekeken naar hoe je database ingesteld is dan? Lijkt me evident dat daar je probleem zit.

[ Voor 7% gewijzigd door RobIII op 01-06-2009 17:52 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • link0007
  • Registratie: Augustus 2006
  • Niet online
Nee, probleem zit niet in de database :)

Zoals ik al zei, volgens firebug is het bij het verzenden al verkeerd, en daarnaast zijn andere zaken (die gewoon in een form worden ingevuld) wel correct.

IF IF = THEN THEN THEN = ELSE ELSE ELSE = IF;


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
link0007 schreef op maandag 01 juni 2009 @ 17:54:
Nee, probleem zit niet in de database :)

Zoals ik al zei, volgens firebug is het bij het verzenden al verkeerd, en daarnaast zijn andere zaken (die gewoon in een form worden ingevuld) wel correct.
Oh wacht, dat stukje had ik gemist. Maar je pagina (meta tags, http headers), je database en je PHP en alles is dus UTF-8?
Ajax uses UTF-8. Normal forms are sent using the encoding of the parent page. Thus a SJIS encoded page will default to sending form content encoded in SJIS. Ajax submitted forms on the other hand will be sent as UTF-8. If for some strange reason, UTF-8 is not the character set of choice for the server, this will require a solution such as the server recognizing and translating UTF-8 responses to a desired character encoding.

[ Voor 36% gewijzigd door RobIII op 01-06-2009 18:05 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • link0007
  • Registratie: Augustus 2006
  • Niet online
Hoe bedoel je ajax gebruikt utf-8? En doet http-post dat ook? Ik dacht dat dat ascii was, en percent-encoding (URI-encoding) gebruikte om informatie te versturen?

[ Voor 15% gewijzigd door link0007 op 01-06-2009 18:25 ]

IF IF = THEN THEN THEN = ELSE ELSE ELSE = IF;


Acties:
  • 0 Henk 'm!

  • Kalentum
  • Registratie: Juni 2004
  • Laatst online: 21:50
heb je al geprobeerd de data te urlencoden?

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik zie nu pas dat je geen encodeURIComponent gebruikt; ik heb even geen tijd om verder te neuzen en weet dus zo snel niet welk AJAX framework (if any) je gebruikt, maar kijk er eens naar.

[ Voor 35% gewijzigd door RobIII op 01-06-2009 19:21 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
link0007 schreef op maandag 01 juni 2009 @ 18:24:
Hoe bedoel je ajax gebruikt utf-8? En doet http-post dat ook? Ik dacht dat dat ascii was, en percent-encoding (URI-encoding) gebruikte om informatie te versturen?
In principe doet HTTP niks anders dan bytes versturen. Welke encoding er gebruikt is volledig in de handen van de ontwikkelaar die de browser instrueert over de te gebruiken encoding.

Acties:
  • 0 Henk 'm!

  • link0007
  • Registratie: Augustus 2006
  • Niet online
naja, ik ben gewoon laf geweest en heb gezorgd dat tags niet in 't japans kunnen (alleen "normale" woorden). 't is toch afschuwelijk zeldzaam dat iemand alternatieve talen gebruikt voor iets als tagging.. Dat moet juist universeel blijven :)

IF IF = THEN THEN THEN = ELSE ELSE ELSE = IF;


Acties:
  • 0 Henk 'm!

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

crisp

Devver

Pixelated

link0007 schreef op dinsdag 02 juni 2009 @ 17:48:
naja, ik ben gewoon laf geweest en heb gezorgd dat tags niet in 't japans kunnen (alleen "normale" woorden). 't is toch afschuwelijk zeldzaam dat iemand alternatieve talen gebruikt voor iets als tagging.. Dat moet juist universeel blijven :)
Dat is natuurlijk symptoombestrijding en geen oplossing; zolang je geen encoding gebruikt (zie RobIII in "\[js/php]versturen van japanse tekens via...") kan je ook met normale karakters in de problemen komen...

Intentionally left blank

Pagina: 1