[PHP/MySQL] Karakterset problemen

Pagina: 1
Acties:
  • 282 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Intheweb
  • Registratie: April 2005
  • Laatst online: 16:21
Goed, na lange tijd heb ik weer eens een probleem waar ik niet uit kom.

Het volgende probleem:
Op een website zijn via een CMS systeem namen ingevoerd met speciale tekens. Zoals bijv. é

Nu lukt het mij ook niet om de é keihard in de database te zetten, want dan verschijnt er een ?

Nu is de vraag: welke Collatie moet ik gebruiken? Wat is standaard en is er uberhaupt een standaard?
Nu staat de database standaard ingesteld op UTF-8.

Kan iemand mij hier iets meer over vertellen?

Hmm, die PHP komt nu nog niet echt aanbod... dus misschien misplaatst in de titel

[ Voor 8% gewijzigd door Intheweb op 27-07-2007 13:40 ]

Doe maar een onsje meer...


Acties:
  • 0 Henk 'm!

Verwijderd

Als je het goed in je db wilt hebben moet de charset van je webpagina gelijk zijn aan de charset in de db. ISO-8859-1 is bijvoorbeeld latin1.

Acties:
  • 0 Henk 'm!

  • Gwaihir
  • Registratie: December 2002
  • Niet online
Het meest standaard in deze contreien zijn ISO-8859-1 en UTF-8. UTF-8 is leuk omdat het alle characters aan kan. UTF-8 is niet leuk omdat PHP het nog niet door en door aan kan (dat komt bij PHP6). Daarom zou het goed kunnen dat je het voor een niet al te internationale site voorlopig nog liever met ISO-8859-1 doet.

Maar het belangrijkste is wat Herelam zegt: het moet wel van voor naar achter en terug (bij invoer) matchen. Omzetten kan indien nodig, maar er domweg een ander labeltje opplakken geeft de problemen die jij beschrijft.

Acties:
  • 0 Henk 'm!

  • Intheweb
  • Registratie: April 2005
  • Laatst online: 16:21
Bedankt voor de reactie's. Ik heb de database nu op latin staan en via het CMS kunnen nu temminste de speciale karakters worden toegevoegd.

Wel blijft htmlentities() van PHP irritant dat hij de karakters niet omzet naar de html entities.

Doe maar een onsje meer...


Acties:
  • 0 Henk 'm!

Verwijderd

Intheweb schreef op vrijdag 27 juli 2007 @ 16:02:
Wel blijft htmlentities() van PHP irritant dat hij de karakters niet omzet naar de html entities.
Lukt dat ook niet als je aan htmlentities een charset meegeeft als derde argument?

Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Als je de UTF-8 collatie gebruikt voor je veld, tabel en database, dient ook je verbinding de juiste karakterset te gebruiken. Ik zelf gebruik hiervoor het volgende stukje code direct na de mysql_select_db();
PHP:
1
2
3
4
$db_charset = mysql_query( "SHOW VARIABLES LIKE 'character_set_database'" );
$charset_row = mysql_fetch_assoc($db_charset);
mysql_query( "SET NAMES '" . $charset_row['Value'] . "'" );
unset($db_charset, $charset_row);


De webpagina moet de content ook in de juiste encoding naar je server versturen, waarvoor je de HTTP Content-type header gebruikt;
HTML:
1
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


Die geeft niet alleen aan de browser aan dat de content die hij ontvengt in UTF-8 is, maar ook dat formulieren ed in UTF-8 moeten worden ingestuurd.

Let op dat UTF8 een multibyte encoding is, en je dus ook de multibyte PHP functies moet gebruiken voor string-bewerkingen; http://nl2.php.net/manual/en/ref.mbstring.php

[ Voor 11% gewijzigd door frickY op 27-07-2007 16:31 ]


Acties:
  • 0 Henk 'm!

  • Intheweb
  • Registratie: April 2005
  • Laatst online: 16:21
Bedankt voort de reactie's. Kom net terug van vakantie en maandag ga ik er verder mee aan de slag. Jullie horen dan meer :)

Doe maar een onsje meer...


Acties:
  • 0 Henk 'm!

  • sopsop
  • Registratie: Januari 2002
  • Laatst online: 18-09 13:37

sopsop

[v] [;,,;] [v]

Gwaihir schreef op vrijdag 27 juli 2007 @ 14:24:
Het meest standaard in deze contreien zijn ISO-8859-1 en UTF-8. UTF-8 is leuk omdat het alle characters aan kan. UTF-8 is niet leuk omdat PHP het nog niet door en door aan kan (dat komt bij PHP6). Daarom zou het goed kunnen dat je het voor een niet al te internationale site voorlopig nog liever met ISO-8859-1 doet.
Ik zou dan toch ISO/IEC 8859-15 gebruiken, aangezien dat een uitgebreidere set is, met - niet onbelangrijk - ondersteuning voor het €-teken.

Acties:
  • 0 Henk 'm!

Verwijderd

sopsop schreef op woensdag 08 augustus 2007 @ 10:52:
[...]

Ik zou dan toch ISO/IEC 8859-15 gebruiken, aangezien dat een uitgebreidere set is, met - niet onbelangrijk - ondersteuning voor het €-teken.
Maar die kun je gewoon met een html-entity tonen :)

Acties:
  • 0 Henk 'm!

  • eek
  • Registratie: Februari 2001
  • Laatst online: 06-04-2020

eek

@MagickNET

Wij gebruikten hier ook eerst ISO-8859-1 maar zijn later overgestapt op Windows-1252 i.p.v. ISO-8859-15. Misschien ook een optie om naar te kijken.

Skill is when luck becomes a habit.


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op woensdag 08 augustus 2007 @ 11:41:
Maar die kun je gewoon met een html-entity tonen :)
Hoe minder vertaalslagen, hoe beter. Probeer zoveel mogelijk de originele data (dus € in plaats van &euro;) in je database of HTML-documenten op te slaan; op een dag zul je er blij mee zijn dat je het simpel hebt gehouden.
eek schreef op woensdag 08 augustus 2007 @ 13:21:
Wij gebruikten hier ook eerst ISO-8859-1 maar zijn later overgestapt op Windows-1252 i.p.v. ISO-8859-15. Misschien ook een optie om naar te kijken.
Waarom niet gelijk overstappen naar unicode? Unicode kent vele voordelen boven Windows-1252 en is niet moeilijker in gebruik.

[ Voor 33% gewijzigd door Verwijderd op 08-08-2007 15:23 ]


Acties:
  • 0 Henk 'm!

  • Intheweb
  • Registratie: April 2005
  • Laatst online: 16:21
Nou, ben weer op mijn werkplek, en ze zijn hier nog niet verder gekomen met het karakterset probleem.
Het lijkt erop dat de database van onze webhosting verkeerd staat ingesteld. Want de tekens worden niet goed weggeschreven.
Het is en blijft een raar ding die karakters.

Doe maar een onsje meer...


Acties:
  • 0 Henk 'm!

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 09-09 15:24
lees deze website eens, wellicht zet het je op het goede spoor.

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Lijkt me een header probleem...?

PHP:
1
header('Content-Type: text/html; charset=UTF-8');


en ook zorgen dat je dit uitvoert direct na t openen van je database connectie:
PHP:
1
2
mysql_query('SET NAMES UTF8');
mysql_query('SET CHARACTER SET UTF8');


En uiteraard zorgen dat je alle velden ook daadwerkelijk als UTF8 Unicode karakterset hebt ingesteld.

[ Voor 15% gewijzigd door Cartman! op 13-08-2007 23:39 ]


Acties:
  • 0 Henk 'm!

  • Intheweb
  • Registratie: April 2005
  • Laatst online: 16:21
We gaan wachten op de nieuwe MySQL server. Hopen dat we die in september ingebruik kunnen gaan nemen. Dan zijn deze problemen hopelijk in 1 keer weg en gaan we over op UTF-8.

Doe maar een onsje meer...

Pagina: 1