Door
Co de Kraker
op 10-08-2013 11:06
gewijzigd op 10-08-2013 11:28
1.387 views
Ook op dit forum heb ik lang gezocht, maar geen bevredigend antwoord gevonden.
Tekens als é,á en ë worden in de internetbrowser (ie en ff) weergegeven als een symbool met een vraagteken.
Voor de website haal ik gegevens op uit mijn database en geef die weer op mijn site. Tot nu toe gaat alles goed, behalve dat de codering niet helemaal lekker gaat.
Html heeft utf-8
<meta charset="utf-8">
Alles in mijn database staat op utf-8 (tabellen, collatie, etc.) Behalve twee -->
Moet deze ook op utf-8 gezet worden: characterset_database en character_set_server? Hoe zou ik dat moeten doen? Ik zie veel over my.cnf staan op forums, maar wat moet ik waar wijzigen (als het nodig is). Graag hoor ik het.
3 punten:
1) collatie en charset van je tabellen moeten correct staan
2) connectie naar je database moet goed staan, zowel bij het invoeren van je data, als bij het uitlezen van je data. Denk hierbij aan het 'garbage in = garbage out' principe
3) geef de juiste http header mee, of zet een meta tag.
1 en 3 lijk je in orde te hebben, dus dan ligt het hoogstwaarschijnlijk aan punt 2. Ik weet niet welke adapter je gebruikt, maar als je mysqli gebruikt dan kan je de connectie zetten doormiddel van [php]mysqli_set_charset[/php]. Als je PDO gebruikt dan zal je na het connecteren een query moeten uitvoeren:
SET names utf8, COLLATION_CONNECTION='utf8_unicode_ci', CHARACTER SET utf8
(waarbij je de collatie uiteraard zo moet zetten als de collatie die jij gebruikt, dit is mijn voorbeeld)
er zijn een paar stappen te ondernemen om dit te voorkomen:
nadat je verbinding tot stand hebt gebracht met de database met mysqli_connect() moet je nog even aangeven welke karakterset je gebruikt met deze functie
<?php
mysqli_set_charset($conn, 'utf8');
?> aangepast op aanwijzingen van Carlos
daarnaast moet je natuurlijk de browser laten weten welke charset je gebruikt.
voor HTML5:
Omdat ik vrij nieuw ben met php en niet gelijk snap waar de fout zit, heb ik de situatie op onderstaande afbeeldingen verduidelijkt. Ergens zit dus de fout..
Okee xml uitlezen is als html uitlezen.
probeer de xml eens door de functie html_entity_decode($xmlstring) te halen alvorens deze op te slaan in de database.
om verder te komen: laat phpmyadmin die woorden zoals californïe etc wel goed zien als je de inhoud van de tabel ophaalt?
<?php
mysqli_set_charset($myConnection, 'utf8'); ?>
na de connection is gelukt, mysqli_set_charset verwacht twee parameters, dus voor 'utf' komt de variabele die de verbinding tot stand brengt.