Hallo,

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.

Nico
Hoe is de ondersteuning voor UTF-8 overal ingesteld? Denk aan je database, connectie, je bestandsencoding, en je HTML-document.

Als een daarvan niet UTF-8 geschikt is, zal je zulke vreemde karakters zien.
Ik loop hier ook tegenaan... @Arien. Je hebt het hierover dat we ook moeten denken aan de database en connectie.. is het dan niet vodoende om de
<meta charset="utf-8" />
alleen op te nemen? kan je daar wat meer over vertellen?
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.

Nico
En heb je ook de character-set bij de databaseconnectie goed ingesteld?
Dit zojuist gedraaid:

<?php
ALTER DATABASE `databasenaam` CHARACTER SET utf8 COLLATE utf8_general_ci;
?>

Vervolgens dit uitgevoerd:
<?php
SHOW VARIABLES;
?>

Met als resultaat:
<?php
# Variable_name, Value

character_set_client, 'utf8'
character_set_connection, 'utf8'
character_set_database, 'utf8'
character_set_filesystem, 'binary'
character_set_results, 'utf8'
character_set_server, 'latin1'
character_set_system, 'utf8'
character_sets_dir, 'C:\\xampp\\mysql\\share\\charsets\\'
collation_connection, 'utf8_general_ci'
collation_database, 'utf8_general_ci'
collation_server, 'latin1_swedish_ci'
?>

De connectie staat ook op UTF-8. Ik heb voor de zekerheid MySQL nog een keer gestopt en geherstart.

Nico
En zijn je tabellen ook allemaal voorzien van de juiste collatie?
Gebruik je MySqli ?
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;
?>

TABLE_TYPE = BASE TABLE
ENGINE = MyISAM
TABLE COLLATION = 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?
Laat eens zien hoe je je database-connectie maakt.
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.
?>

Reageren