mysql + php soms rare tekens in database

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • PainkillA
  • Registratie: Augustus 2004
  • Laatst online: 26-08 19:26
Ik heb een formulier met landen selectielijst welke onder andere bevat:
"Italië"

Nu zijn er ook waardes in de database welke als volgt eruitzien:
"Italië"

Dit moet Italië zijn maar wat ik ook doe ik kan het nooit zelf herproduceren. De website bevat:
"<meta http-equiv="content-Type" content="text/html; charset=utf-8">"

het formulier bevat:
"<option value="Italië" >Italië</option>"

Dit wordt in een tabel opgeslagen met de collation:
latin1_swedish_ci

heeft iemand een idee waar dit aan kan liggen? het rare is dat het overgrote deel goed gaat maar een enkele word fout geinsert en allemaal met een trema e erin.

Acties:
  • 0 Henk 'm!

  • Koetjeboe
  • Registratie: Maart 2002
  • Laatst online: 17-09 20:36

Koetjeboe

Boe, zegt de koe

Nou, dat komt doordat je tabel latin1_swedish_ci is ipv utf8_*

Nu zul je dit dus expliciet moeten omzetten of je tabel ook utf8 maken. Let er wel op dat sommige php functies ook niet standaard utf8 gebruiken/compatibel zijn, zoals html_entities en strtoupper en dergelijke.

[ Voor 33% gewijzigd door Koetjeboe op 05-10-2009 15:09 ]


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Je gebruikt latin1 en utf-8 door elkaar heen en je hebt geen idee wat er fout gaat? 8)7

{signature}


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
^^ Wat hij zegt. Daarbij is het verstandig ook even te kijken welke encoding je meegeeft in de HTTP headers (en dus niet in de HTML meta tags); als daar wéér iets anders in staat is de verwarring natuurlijk compleet :P

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!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 21:46

Matis

Rubber Rocket

Natuurlijk verhelpt dat het *probleem* niet, maar waarom gebruik je in je database niet gewoon de
Wikipedia: ISO 3166-1 ?

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • PainkillA
  • Registratie: Augustus 2004
  • Laatst online: 26-08 19:26
Voutloos schreef op maandag 05 oktober 2009 @ 15:08:
Je gebruikt latin1 en utf-8 door elkaar heen en je hebt geen idee wat er fout gaat? 8)7
natuurlijk had ik ook al het idee dat het aan de encoding lag maar waarom gaat het dan zeg maar 80% van de tijd wel goed?

als ik in de http headers kijk zie ik staan "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"

ik zit er aan te denken om dan de tabel om te zetten naar utf-8.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
PainkillA schreef op maandag 05 oktober 2009 @ 15:21:
als ik in de http headers kijk zie ik staan "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"
Dat is wat je browser verstuurt naar je webserver (Request Header). Het gaan om wat je webserver verstuurd naar je browser (Response Header) ;) Je moet dan kijken naar de Content-Type: text/html; charset=XXX header.
PainkillA schreef op maandag 05 oktober 2009 @ 15:21:
ik zit er aan te denken om dan de tabel om te zetten naar utf-8.
Het is sowieso goed gebruik om alle encodings overal gelijk te houden ;)

[ Voor 37% gewijzigd door RobIII op 05-10-2009 15:33 ]

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!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
PainkillA schreef op maandag 05 oktober 2009 @ 15:21:
[...]


natuurlijk had ik ook al het idee dat het aan de encoding lag maar waarom gaat het dan zeg maar 80% van de tijd wel goed?
Ga eens Googlen op het verschil tussen beiden, zou ik dan zeggen. Dan zul je er achter komen dat voor de meeste letters het geen verschil maakt, aangezien die op dezelfde positie zitten, maar voor de wat meer speciale letters (zoals de ë) wel.

Acties:
  • 0 Henk 'm!

  • Joolee
  • Registratie: Juni 2005
  • Niet online
Je moet alles in één formaat zetten. Alleen je database veranderen gaat niet helpen.

Je moet in je verbinding met je database het juiste karakterset gebruiken, je PHP functies moeten het karakterset ondersteunen, je moet in je antwoord naar de browser de juiste HTTP header meesturen.

Nu vergeet ik ongetwijfeld iets maar hiermee moet je al verder komen.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Bedankt voor de tip Janoz, leuk leesvoer.

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Haha... ik lees nu pas goed de topic-start, dus ik ga mezelf citeren uit een ander topic:
HuHu schreef op woensdag 23 september 2009 @ 12:56:
Tip: laat de klant het land niet invullen, maar laat hem kiezen uit een lange lijst en sla de ISO 3166-1 code op. Bij voorkeur de alpha-2.
Nu laat PainkillA al kiezen uit een lijst, dus voor hem geldt alleen het stukje over het opslaan van de landcode.

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
HuHu: Matis refereerde al daarnaar.

Maar dan nog heeft ts verplicht leesvoer. ;)

{signature}

Pagina: 1