php/mysql: é á etc juist weergeven
Ik ben met een stuk website bezig binnen een al bestaande wordpress website.
Ik loop tegen het probleem aan dat de tekst "pokémon" uit de database getoond wordt als: pok?mon.
Ik heb zelf al een aantal dingen geprobeerd, maar dit was meer loos proberen dan echt een goede idee hebben wat ik aan het doen was.
Iemand een idee?
Als je meer info nodig hebt over bepaalde instellingen, vraag maar raak.
Alvast bedankt!
Rico
een aantal van de geprobeerde dingen zonder resultaat:
head aanpassen naar utf-8
htmlspecialchars()
function replace_unicode_escape_sequence($match) {
return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');
}
$str = preg_replace_callback('/\\\\u([0-9a-f]{4})/i', 'replace_unicode_escape_sequence', $testtabel);
echo $str;
echo '<br/>';
$str2 = iconv('UTF8', 'ASCII//TRANSLIT', $testtabel);
echo $str2;
echo replace_unicode_escape_sequence($testtabel);
1) je database collatie goed hebben staan. Als je database nog niet correct is, kan je dat met deze query goed zetten:
ALTER TABLE table_name CONVERT TO character set utf8 collate utf8_general_ci;
(let op dat dit niet altijd meer al bestaande data in je database goed zet).
2) als je verbinding maakt met je database, zorg dan dat die verbinding ook correct is. Voer altijd deze query uit zodra je verbinding hebt gemaakt:
SET names utf8, COLLATION_CONNECTION='utf8_unicode_ci',character set utf8;
3) verzend de juiste header voor je de pagina doorstuurt:
header('Content-type: text/html; charset=utf-8');
4) zet de juiste charset in je html in de meta data:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Dan zou het goed moeten komen... alleen als je nog onjuiste data hebt zitten in je database, dan komt het helaas niet altijd goed. Die zal je dus wel handmatig moeten converteren in sommige gevallen.
Gewijzigd op 29/12/2012 18:09:33 door Erwin H
Toevoeging op 29/12/2012 18:31:18:
Heb het allemaal geprobeerd (tegelijktijdig uiteraard) en het werkt nog steeds niet.
Belangrijke informatie die ik net bedacht is dat het op een subdomein van de site wel werkte, met dezelfde database
Op dat subdomein stond een tabel met informatie uit de database waaronder een beschrijving en daar gaat het gewoon goed, copy paste ik die code binnen wordpress (en pas ik het e.e.a aan) dan werkt alles nog behalve dat de é van pokemon een ? is...
Toevoeging op 29/12/2012 18:44:45:
aanvullende gegevens:
Gewijzigd op 29/12/2012 18:48:18 door Rico van P
Off-topic: Het is herstelt met een t op het eind. Ik herstel, jij herstelt.
Gewijzigd op 29/12/2012 19:44:09 door P-ter AA
En wat je zegt over herstelt snap ik niet helemaal, was dat tegen mij?
EDIT
Ooh ik zie nu wat je bedoelt, staat in de database inderdaad.
Database staat barstensvol met zulk soort fouten, niet mijn taak om aan te passen ;)
Gewijzigd op 29/12/2012 22:39:06 door Rico van P
bij mij werkt het om bovenaan
header("Content-type: text/html; charset=utf-8");
te zetten.