[PHP/MySQL] Rare tekens in database

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben met stomheid geslagen...

Ik heb een lokale database en een online database. Beide MySQL v4.1.9. Wanneer ik de site lokaal gebruik (met lokale DB) en vreemde tekens in de database slinger, gaat alles prima. De é blijft een é etc.

Als ik op de online versie van de site hetzelfde doe, komen de tekens als "ë" in de database. In snap er geen hol van. De collatie (whatever that is) van beide databases staat op "latin1_swedish_ci" en de online versie is geladen met een dump van de locale versie.

Hebben jullie ideeën wat dit kan veroorzaken en misschien een oplossing?

Acties:
  • 0 Henk 'm!

  • SvEn
  • Registratie: Juli 2001
  • Laatst online: 18-09 19:45

SvEn

a.k.a sv3nrg

de charset instelling is dan anders..

mijn voorkeur is ISO .. waarschijnlijk staat hij nu op UTF

dit moet je op je webserver instellen

[ Voor 16% gewijzigd door SvEn op 23-03-2005 14:23 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Misschien als je ze beiden in Unicode opslaat?
SvEn schreef op woensdag 23 maart 2005 @ 14:23:
dan charset instelling is dan anders..
Hij zegt net dat die hetzelfde zijn. :P

[ Voor 68% gewijzigd door NMe op 23-03-2005 14:23 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Dat heb ik ook eens gehad, inderdaad heel erg vreemd. Volgens mij heb ik het opgelost door (bv. via phpMyAdmin) de collation opnieuw op latin1_swedish_ci te zetten. Als dat het niet is, moet ik weer even nadenken :)

Acties:
  • 0 Henk 'm!

  • SvEn
  • Registratie: Juli 2001
  • Laatst online: 18-09 19:45

SvEn

a.k.a sv3nrg

-NMe- schreef op woensdag 23 maart 2005 @ 14:23:
Misschien als je ze beiden in Unicode opslaat?


[...]

Hij zegt net dat die hetzelfde zijn. :P
hij zei een collatie geen charset

Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Nu online

BCC

htmlentities gebruiken? Dit soort tekens wil je echt niet in je database..

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • SvEn
  • Registratie: Juli 2001
  • Laatst online: 18-09 19:45

SvEn

a.k.a sv3nrg

BCC schreef op woensdag 23 maart 2005 @ 14:26:
htmlentities gebruiken? Dit soort tekens wil je echt niet in je database..
en als je dan toch bezig bent

htmlspecialchars();
en
addslashes();
eroverheen :)

Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 21-09 12:54
Je hebt een verschil in je characterset. De oplossing heb ik niet voor je, maar lees de volgende topics eens door. Misschien zit er een hint/tip/oplossing voor jou tussen.

[MySQL 4.1] Fout in query
[Java/MySQL] character set probleem
[MySQL] Characterset

Ik heb hetzelfde eens ervaring, maar ik heb toen rigoreus all mijn tabellen op utf8 zet. Nooit weer problemen mee gehad.

[ Voor 12% gewijzigd door Sybr_E-N op 23-03-2005 14:28 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

BCC schreef op woensdag 23 maart 2005 @ 14:26:
htmlentities gebruiken? Dit soort tekens wil je echt niet in je database..
En waarom niet? Wat denk je dat kleiner is om op te slaan in je database? é of é? Je wil juist wèl die kleine manier van opslaan in je database, en htmlentities gooi je eroverheen als je het afdrukt naar de browser.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
BCC schreef op woensdag 23 maart 2005 @ 14:26:
htmlentities gebruiken? Dit soort tekens wil je echt niet in je database..
Ik probeer nog even een nieuwe dump te maken met database compatibiliteit op "None". Zien of dat wat uitmaakt. Die tekens laat ik wel in, omdat de headers van de site (www.amant.nl) in Flash zijn. Mocht ik het niet anders kunnen oplossen, dan gaat er een htmlentities overheen :)

Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Nu online

BCC

-NMe- schreef op woensdag 23 maart 2005 @ 14:28:
[...]
En waarom niet? Wat denk je dat kleiner is om op te slaan in je database? é of é? Je wil juist wèl die kleine manier van opslaan in je database, en htmlentities gooi je eroverheen als je het afdrukt naar de browser.
Bij storage van text voor in internetpagina is dat verwaarloosbaar. Dan kun je ook aanvoeren dat het uitvoeren van een htmlentities bij het inserten in de database efficiënter is dan het elke keer uitvoeren van een htmlentities bij het uitlezen. Punt is dat bij een & eacute; je altijd weet wat het moet zijn en bij een "ë" (voorbeeld TS) je geen enkel idee hebt.

[ Voor 21% gewijzigd door BCC op 23-03-2005 14:31 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

BCC schreef op woensdag 23 maart 2005 @ 14:30:
Bij storage van text voor in internetpagina is dat verwaarloosbaar. Dan kun je ook aanvoeren dat het uitvoeren van een htmlentities bij het inserten in de database efficiënter is dan het elke keer uitvoeren van een htmlentities bij het uitlezen. Punt is dat bij een & eacute; je altijd weet wat het moet zijn en bij een "ë" (voorbeeld TS) je geen enkel idee hebt.
Wat jij nou wil doen heet symptoombestrijding. Je erkent dat er een probleem is, maar in plaats van dat probleem te fixen, wil je eromheen werken, door je karakters aan te passen voor je ze opslaat in de database. Op die manier is het probleem er nog steeds, en kun je er op elk moment tegenaan lopen. En dat terwijl het fixen van een charset probleem veel makkelijker is. :/

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Wat het nog vreemder maakt is dit:

Wanneer ik via phpMyAdmin een de inhoud van een veld wijzig in bijv. éëè dan worden de tekens wél goed getoond op de site. Doe ik het via het CMS (addslashes, trim) dan krijg ik dus de vreemde tekens. Ik lees even verder, maar blijf vooral mogelijke oplossingen posten.

De tabel converteren naar utf-8 hielp ook niet, overigens.

Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Nu online

BCC

-NMe- schreef op woensdag 23 maart 2005 @ 14:46:
[...]
Wat jij nou wil doen heet symptoombestrijding. Je erkent dat er een probleem is, maar in plaats van dat probleem te fixen, wil je eromheen werken, door je karakters aan te passen voor je ze opslaat in de database. Op die manier is het probleem er nog steeds, en kun je er op elk moment tegenaan lopen./
Dat is wel heel kort door de bocht. Ik zie het eerder als gebruik maken van een universele charset, waardoor je al je charset problemen voorkomt. Je pagina is dan ALTIJD van server naar server te verplaatsen zonder problemen.
En dat terwijl het fixen van een charset probleem veel makkelijker is. :
Ja, dat blijkt wel uit dit topic :z

[ Voor 16% gewijzigd door BCC op 23-03-2005 15:06 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
BCC schreef op woensdag 23 maart 2005 @ 14:30:
[...]


Bij storage van text voor in internetpagina is dat verwaarloosbaar. Dan kun je ook aanvoeren dat het uitvoeren van een htmlentities bij het inserten in de database efficiënter is dan het elke keer uitvoeren van een htmlentities bij het uitlezen. Punt is dat bij een & eacute; je altijd weet wat het moet zijn en bij een "ë" (voorbeeld TS) je geen enkel idee hebt.
Punt is dat als je moet gaan zoeken op bepaalde termen dat je dan hard op je bek gaat.

Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Nu online

BCC

raptorix schreef op woensdag 23 maart 2005 @ 15:07:
[...]
Punt is dat als je moet gaan zoeken op bepaalde termen dat je dan hard op je bek gaat.
Ja, maar TS heeft hier toch over een simpel CMSje, geen Universiteits bibliotheek?

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Website voor de regio's grootste dienstverlener. Maar Raptorix heeft een punt. Er moet wel gezocht kunnen worden op, bijvoorbeeld: diëtetiek.

Hoewel je natuurlijk ook een htmlentities op de zoekstring kunt loslaten, voordat je de database ermee bestookt 8)7

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

BCC schreef op woensdag 23 maart 2005 @ 15:08:
Ja, maar TS heeft hier toch over een simpel CMSje, geen Universiteits bibliotheek?
Ook in een simpel CMS moet je wel eens zoeken naar woorden met "rare" karakters; het Nederlands is er vol van.
BCC schreef op woensdag 23 maart 2005 @ 14:59:
Dat is wel heel kort door de bocht. Ik zie het eerder als gebruik maken van een universele charset, waardoor je al je charset problemen voorkomt. Je pagina is dan ALTIJD van server naar server te verplaatsen zonder problemen.
Ja, inclusief alle nieuwe problemen die het meebrengt. En het kan makkelijker als je gewoon je charset goed hebt staan.[/]
Ja, dat blijkt wel uit dit topic :z
Dus omdat er een topic over is, is het moeilijk? Ik heb wel meer topics gezien die makkelijk op te lossen waren, maar TS gewoon niet wist waar ie kijken moest. Ooit erbij stilgestaan dat dat misschien het geval is?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Nu online

BCC

Verwijderd schreef op woensdag 23 maart 2005 @ 15:11:
Website voor de regio's grootste dienstverlener. Maar Raptorix heeft een punt. Er moet wel gezocht kunnen worden op, bijvoorbeeld: diëtetiek.
Hoewel je natuurlijk ook een htmlentities op de zoekstring kunt loslaten, voordat je de database ermee bestookt 8)7
Juist.. andere oplossing voor hetzelfde probleem dus... maar dit is verder compleet offtopic allemaal.. sorry :)

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het probleem blijkt helemaal niet in de database te zitten.

Ik heb een formulier (met of zonder enctype, probleem houdt aan) en als ik de vulling daarvan post worden ze als vreemde tekens ontvangen. Als ik vervolgens de utf8_decode over alle $_POST waardes heen haal is het opgelost, maar ik vind dit wel aardig maf :?

Waar ligt de oorzaak hiervan?

Edit: Het probleem is opgelost

De oorzaak zat 'm in de content-type meta tag, die stond op utf-8, i.p.v. iso-8859-1. Lokaal werd deze specificatie echter lekker genegeerd. Toch bedankt voor jullie hulp/suggesties people! _/-\o_ Hopelijk onthouden jullie dit, mocht je er zelf een keer tegenaan lopen ;)

[ Voor 59% gewijzigd door Verwijderd op 23-03-2005 15:39 . Reden: Opgelost ]


Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Met welke charset serveer je je pagina's? :)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
BtM909 schreef op woensdag 23 maart 2005 @ 15:39:
Met welke charset serveer je je pagina's? :)
Nu dus met:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

En dat werkt prima :D

Acties:
  • 0 Henk 'm!

  • Superdeboer
  • Registratie: December 2002
  • Niet online

Superdeboer

Sa-weee-tah

Let me guess, de pagina waar je form op staat, wordt zélf met de UTF-8 charset geserveerd. De input van het form wordt dus ook als UTF-8 gepost. Als jij dan via phpAdmin in je database gaat kijken, zien die UTF-8 characters er raar uit, wánt die charset staat op Latin 1.

Jij zegt:
Als ik op de online versie van de site hetzelfde doe, komen de tekens als "ë" in de database.
Daar leid ik uit af dat je lokaal als standaard charset ISO-8859-1 oid hebt ingesteld, en dat dat op de online versie UTF-8 is.
Overigens, heb je ook geprobeerd om die "ë" uit de database weer uit te poepen in een pagina met een UTF-8 charset? Dat moet normalerwijs gewoon goed gaan lijkt me. :)


Om meerdere redenen is het op zich verstandig om de UTF-8 charset te gebruiken, omdat deze uitbreidbaar is met alle chars van allerlei internationale talen; het is een universele charset. Mocht het echter een probleem op leveren op je online site, omdat je er niet op gerekend hebt, en omdat het teveel werk kost om bepaalde dingen te fixen, zorg dán dat je overal consequent de volgende header aan *al* je pagina's meegeeft:
PHP:
1
header('Content-Type: text/html; charset=utf-8');


Moraal van het verhaal: zorg dat je consequent bent. Óf bij *alle* input én output UTF-8, óf bij *alle* input en output ISO-8859-1. :)



edit:

Hmmm keertje F5'en tussendoor mag ook wel. :X

Oscar Alexander:
Nu dus met:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
En dat werkt prima :D

Als je nou die header gebruikt die ik hierboven heb staan, dan kun je dat meta-element er helemaal uitgooien. Meta-elementen worden in principe overruled door zo'n header. :)

[ Voor 16% gewijzigd door Superdeboer op 23-03-2005 15:48 ]

When I write my code, only God and I know what it means. One week later, only God knows.
Hell yes it's a Cuban Cigar, but I'm not supporting their economy, I'm burning their fields.


Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Superdeboer schreef op woensdag 23 maart 2005 @ 15:44:
Als je nou die header gebruikt die ik hierboven heb staan, dan kun je dat meta-element er helemaal uitgooien. Meta-elementen worden in principe overruled door zo'n header. :)
Het is ook veel netter om het zo te serveren. Alhoewel als TS het echt goed doet (ik zie XHTML), dan gooit hij waarschijnlijk meteen z'n grootste doelgroep overboord ;)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.

Pagina: 1