Ik krijg data vanuit een Oracle database aangeleverd als:
Angélique, Samão, Tümos.
Deze plaats ik 1 : 1 in de MySQL database. Deze namen zoals hierboven staan ook letterlijk in MySQL database.
Vervolgens wil ik die presenteren middels HTML, met htmlentities. (De andere method htmlspecialchars heb ik ook geprobeerd.)
Zonder deze functie krijg ik vreemde karakters.
Maar met deze functie gaan de namen als Angélique, Samão correct, echter de naam Tümos wordt T�mos!!???
Ik heb gegoogled, met verschillende character sets gespeeld, niets helpt.
Heeft iemand een idee waar dit aan zou kunnen liggen.
Ik weet niet of ik je goed begrijp maar de collatie voor die tabel stond op 'latin1 - default collation'. deze heb ik (voor test) gezet op 'UTF - default collation'.
--
De html page stond op de 'korte' versie:
<?php
<meta charset="utf-8" />
?>
heb ik veranderd in de 'lange' versie:
<?php
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
?>
Ik neem dat is wat je bedoeld Ariën of nog iets anders?
Maar wat ik enerzijds niet goed begrijp is dat é en ã correct geconverteerd worden en ü niet? Dat vind ik opmerkelijk in deze.
Ik dacht door het eerdere statement 'ALTER DATABASE...' uit te voeren dat alles naar character set UTF-8 resp. collate utf8_unicode_ci gezet was, wat dus niet zo was.
Nu heb ik dit specifiek voor de tabel uitgevoerd:
<?php
alter table `<tabel naam>` convert to character set utf8 collate utf8_unicode_ci;
?>
En euh... nee dit is geen MySQLi, maar nog MySQL. Ok let op, mocht dit het probleem vormen... dit is een applicatie die vervangen GAAT worden door PHP7, maar in de tussentijd moet dit nog wel blijven werken. Is ook oud PHP5.1 - weet ik, weet ik, weet ik
Maar stel dat MySQLi het probleem is waarom wordt dan het ene karakter als é resp. ã correct geconverteerd en ü niet?
Ik wil mij niet verschuilen maar dit is code die al 'jaren' geleden door mijn voorgangers geïmplementeerd is.
<?php
function fr_mysql_connection($user,$pass,$db,$host) {
if($link=mysql_connect($host,$user,$pass)) {
if (mysql_select_db($db,$link)) {
return($link);
}
}
return(FALSE);
}
?>
En deze $link wordt in een $GLOBAL['db_connecties'][$database_type][$connection_name] geplaatst. Ik heb dit ook nog nooit zo gezien maar het werkt, al heb ik hier niet een goed gevoel bij of dit een goeie manier is. Maar zoals ik zei het werkt.
?>