login  Naam:   Wachtwoord: 
Registreer je!
 Forum

UTF8

Offline xSc - 18/12/2007 21:35
Avatar van xScOnbekend Ik heb alles op UTF8 staan. In DB, in .htacces, in mysql.

Waarom moet ik allerlei kunsten uithalen om de tekens normaal te tonen?

Als ik geen gebruik maak van utf8_encode() en utf8_decode() soms na elkaar, is het drama. Allerlei vreemde tekens zie je dan.

5 antwoorden

Gesponsorde links
Offline timmie_loots - 18/12/2007 22:41 (laatste wijziging 18/12/2007 22:41)
Avatar van timmie_loots PHP gevorderde Wat is de charset waarin je het document verzendt?
Offline Dark_Paul - 18/12/2007 22:51
Avatar van Dark_Paul PHP ver gevorderde Dit probleem heb ik ook. Vreemde tekens werden bij mij raar in de database gezet en opgehaald enzo. Toen een topic over geopend, nooit een voldoenend antwoord op gehad. Ik ben dus benieuwd ernaar..
Jij gebruikt de functie utf8_encode() bij het invoeren in de database en utf8_decode() bij het ophalen (en dan waarschijn htmlentities() eoverheen)?
Offline Grayen - 19/12/2007 08:30
Avatar van Grayen PHP ver gevorderde http://hjdeboer.nl/archives/2004/11/unicode

Ik had dit probleem ook, maar het het verholpen toen ik me er wat in ben gaan verdiepen. Ik heb nu een class aangemaakt ervoor zorgt dat je zelf kan bepalen welke codering de webpagina zal krijgen.

Het komt erop neer dat je het beste het volgende kunt doen:

* PHP maakt standaard gebruik van iso-8859-1
* Om toch je pagina de juiste codering te laten geven moet je dan een header meegeven met daarin welke charset je dan wel wilt gebruiken
* Vervolgens zal je je website moeten worden omgezet naar die andere charset. Dit heb ik gedaan met behulp van de PHP.net: iconv functie. Belangrijk om dan te onthouden is dat je wel alles in de oude charset laat binnen je scripts dus niet overal encodeerders overheen gaan gooien, want dan krijg je een mengsel van twee charsets (de meeste characters blijven hetzelfde, omdat ze de zelfde codering hebben, maar de wat uitgebreidere zoals bijvoorbeeld characters die je met entities aanmaakt worden zullen vage tekens gaan geven). Als je alles in de oude charset hebt gehouden kan je vervolgens over alle output die iconv functie gooien en het omzetten naar de gewenste codering.

Maar dan heb je natuurlijk nog steeds niet je database in utf8 . Ik zou helaas niet weten hoe je dat mooi zou kunnen doen, zonder het te coderen.
Offline xSc - 19/12/2007 09:29 (laatste wijziging 19/12/2007 13:06)
Avatar van xSc Onbekend Het is zo vaag ...

Ik heb dus in .htaccess AddDefaultCharacter .... utf-8

Met m'n meta tag geef ik ook utf-8 op. In m'n mysql staat alles op utf-8.

Wanneer ik vanaf een formulier iets in de db zet, worden de vreemde tekens als rare tekens opgeslagen. Probleem is opgelost wanneer ik dit doe:

$_POST = array_map('utf8_decode', $_POST);

Als ik bijv. een record kopieer van de ene naar de andere tabel moet ik zelfs dit doen:
  1. $aMijnArray = array_map('utf8_encode', $aMijnArray);
  2. $aMijnArray = array_map('utf8_decode', $aMijnArray);

voor een goed resultaat.

Iedereen heeft z'n mond vol over utf-8, maar met de ISO-8859-1 had ik nooit problemen 
Offline Rik - 19/12/2007 09:34
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Grayen schreef:
Maar dan heb je natuurlijk nog steeds niet je database in utf8 . Ik zou helaas niet weten hoe je dat mooi zou kunnen doen, zonder het te coderen.
Kan dat niet met PHP.net: mysql_set_charset()? Daarmee kan je de codering instellen waarin je teksten terugkrijgt die uit de database komen. En volgens mij als de codering van de tabel al op utf-8 staat word tekst bij invoeren in de database vanzelf naar utf-8 geconverteerd.

Alleen moet je als argument utf8 meegeven en dus niet utf-8... Ook werkt dit pas vanaf mysql 5 en php 5.2 lees ik op php.net. In eerdere versies zou dit moeten werken: "set names 'utf8'". Voor meer informatie:
http://dev.mysq...ction.html
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.162s