[php] json_encode en euroteken

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi,

Ik heb een veld in een tabel in een database waarin de gebruiker teksten kan opslaan. In deze tekst staan ook tekens als bijvoorbeeld het euroteken (€). Het opslaan en weergeven daarvan is geen enkel probleem. De Charset van de tabel staat op latin1.

Nu gebruik ik een stukje Ajax om dit veld op te halen en output dit met json_encode(). Dit werkt perfect, behalve als er een euroteken in staat, dan krijg ik de waarde "null" terug.

Nu weet ik dat json_encode() UTF-8 verwacht. Echter gebruik ik utf8_encode() voor dit veld, dan komt de tekst in beeld, maar is het euroteken verdwenen. Wat volgens mij ook logisch is omdat utf8_encode() weer ISO-8859-1 encoding verwacht.

De enige niet zo fraaie oplossing die nu werkt is voor de query deze query uit te voeren:
mysql_query("SET NAMES 'utf8'");

Maar er moet toch wel een nette manier zijn hiervoor? Wie kan mij uitleggen wat ik verkeerd doe? Die charsets blijven me altijd in de weg zitten met dit soort dingen.

[ Voor 4% gewijzigd door Verwijderd op 18-09-2012 20:30 ]


Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 08:46

orf

Waarom gebruik je verschillende karaktersets door elkaar en waarom gebruik je latin1 als collatie?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Om eerlijk te zijn, nooit bij nagedacht. Het werkte altijd prima. Default stond de mysql db op latin1.
Ik heb geen idee of ik zomaar alle tabellen naar UTF8 kan converteren. Ik doe nooit zoveel met die charsets zoals ik al zei. Verder zit je ook nog met de charset van de webserver/Apache voor zover ik begrepen heb.

Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 08:46

orf

Goed om over na te gaan denken. Als je het goed doet loop je niet meer tegen problemen op en hoef je geen lapmiddelen te gebruiken om te converteren. Leesvoer: The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

  • sam.vimes
  • Registratie: Januari 2007
  • Laatst online: 08-06 08:44
+1 voor het antwoord en de link van orf.

Als aanvulling: de latin1 character set (iso-8859-1) bevat geen euroteken. Mogelijk staat "jouw" euroteken op positie 128, waar het ook in de Windows-1252-set staat. In latin1 is dit een onbezette positie. Het is dus niet zo gek dat het teken na een conversie naar utf-8 niet meer te vinden is.
Zie Wikipedia: ISO/IEC 8859-15.

[ Voor 0% gewijzigd door sam.vimes op 20-09-2012 15:02 . Reden: typo ]