see and dream

Het is soms een probleem om vreemde tekens goed weer te geven met UTF-8.
In deze blogpost omschrijf ik het proces wat er is geprobeerd om alles qua UTF-8 recht te trekken op KSART.nl
op een CentOS 7 Linux server.

Er is met “mysql” verbinding gemaakt met het commando:


mysql -u root -p

In “mysql” is er met de volgende oneliner gecontroleerd welke karakterset er momenteel wordt gebruikt:


show variables like 'collation_database';show variables like '%character%';show variables like '%collation%';

Hierna is “mysql” afgesloten en onderstaande variablen toegevoegd in het bestand “my.cnf”.
Dit bestand staat waarschijnlijk in de map “/etc/mysql”.

	
[mysqld]  
init_connect='SET collation_connection = utf8_unicode_ci'  
init_connect='SET NAMES utf8'  
character-set-server=utf8  
collation-server=utf8_unicode_ci  
skip-character-set-client-handshake 

Na deze aanpassing is het van belang om de mysql server opnieuw op te starten.
Als je terug in “mysql” bent en opnieuw de oneliner uitvoerd worden de nieuwe instellingen getoond.

Middels deze query hieronder zijn oude tekens omgezet naar UTF-8 karakters.
Er behoorde enkel “table” en tweemaal “field” vervangen te worden naar wat van toepassing is.

	
update `table` set field = replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(field,'ü','ü'),'ô','ô'),'ó','ó'),'ê','ê'),'à','à'),'ã','ã'),'Ü','Ü'),'Ô','Ô'),'Ó','Ó'),'Ê','Ê'),'À','À'),'Ã','Ã'),'Ç','Ç'),'Ú','Ú'),'Õ','Õ'),'Í','Í'),'Í','Í'),'É','É'),'Â','Â'),'Á','Á'),'ç','ç'),'ú','ú'),'õ','õ'),'í','í'),'é','é'),'â','â'),'á','á'),'ã','ã'),'ç','ç'),'à ','à'),'à ','à'),'º','º'),'ª','ª'),'ç','ç'),'–','–'),'ó','ó'),'é','é'),'á','á'),'ê','ê'),'ã','ã'),'â','â'),'í','í'),'õ','õ'),'Ø','Ø'),'•','-'),'ú','ú'),'à ','À'),'Ã','Ã'),'Ç','Ç'),'â€','"'),'“','"'),'É','É');
	

Verder is het van belang om de correcte meta tag toe te voegen binnen de head tag..

	
<head>
<meta charset="UTF-8">
</head>
	

De juiste header mee te geven..

	
header('Content-Type: text/html; charset=utf-8');
	

Hierna zijn er echter nog steeds problemen geconstateerd.
In de Google Chrome browser werd UTF-8 niet gedecteerd, via “More tools > encoding”, maar een windows karakterset.
In de “network”-tab stond wel gewoon “UTF-8” aangegeven in de headers.

Uiteindelijk heb ik maar een bibliotheek gebruikt genaamd “forceutf8”, om UTF-8 tijdelijk deels op te lossen.
Echter zijn nog niet alle karakters correct, waarschijnlijk komt dit door tekstmanipulatie functie’s met PHP.
Ter afsluiting hier een overzicht van onveilige UTF-8 PHP functie’s.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *