14/11/2019

Accenten in apache2 php mysql applicatie

Filed under: — cybrarian @ 10:30 am

Een bestaande CMS applicatie maakt gebruik maakt van debian, apache2, php, mysql.
Bij het installeren van een reserve-systeem wordt de é niet juist weergegeven op het scherm.

De letter é wordt weergegeven als � in mijn (Firefox) browser.

Gevolg
Erger nog, als ik een “edit” doe van de gegevens, waarbij de bestaande gegevens in invulvelden worden weergegeven, blijft het veld met de accent-letter leeg, en na bewaar is een lege waarde bewaard. In de database is het veld leeg.

Als ik in de applicatie zelf een é invul, lijkt dat te gaan. Die wordt bewaard zonder foutmelding en weergegeven als é.
Maar! In de database zie ik: é. Speelt op zich geen rol maar wel als de andere é’s er als é inzitten en fout weergegeven blijven worden.

Locale en tekensets
Er zijn nogal wat niveau’s waarop taaleigen instellingen worden gemaakt: van de databank, naar de php/apache-server, tot in de browser die het weergeeft.

Server
root@myserver:~# locale

LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE=”en_US.UTF-8″
LC_NUMERIC=”en_US.UTF-8″
LC_TIME=”en_US.UTF-8″
LC_COLLATE=”en_US.UTF-8″
LC_MONETARY=”en_US.UTF-8″
LC_MESSAGES=”en_US.UTF-8″
LC_PAPER=”en_US.UTF-8″
LC_NAME=”en_US.UTF-8″
LC_ADDRESS=”en_US.UTF-8″
LC_TELEPHONE=”en_US.UTF-8″
LC_MEASUREMENT=”en_US.UTF-8″
LC_IDENTIFICATION=”en_US.UTF-8″
LC_ALL=

phpinfo
Een goed hulpmiddel om dat te onderzoeken is phpinfo. Maak op de server een bestand, bv info.php, waarin je phpinfo() aanroept.
Je krijgt een scherm met alle mogelijke informatie over het systeem waarop de CMS draait; server en software versies, instellingen enz.

Apache Environment
HTTP_ACCEPT_LANGUAGE en-US,en;q=0.5
HTTP Headers Information
Accept-Language en-US,en;q=0.5
Core
default_charset iso-8859-1
PHP Variables
_SERVER["HTTP_ACCEPT_LANGUAGE"] en-US,en;q=0.5
mbstring
mbstring.language neutral
mbstring.encoding_translation Off

phpMyAdmin
Met phpMyAdmin kan je kijken hoe de database ingesteld is:
Database Server
Server charset: UTF-8 Unicode (utf8)
General Settings
Server connection collation: utf8mb4_general_ci
Database
Table collation: latin1_swedish_ci

Onzichtbare waarden
Als je in de instellingen (bv php.ini, …) alles exact hetzelfde hebt staan, is dat nog geen garantie voor gelijk gedrag.
De ene versie van php reageert anders dan de andere, zelfs al is het versie-verschil onnoemelijk klein. Zo kan een niet-opgegeven instelling standaard verschillend gedrag opleveren, omdat uitgegegaan wordt van een andere standaard of “default” waarde als er geen instelling gemaakt is.

Als de waarde default_charset niet voorkomt in het initialisatiebestand, geldt standaard…
PHP Version 5.6.0RC3 : iso-8859-1
PHP Version 5.6.40-0+deb8u6 : UTF-8

Dit kan je oplossen door de instelling impliciet op te geven in het php.ini bestand.

default_charset="UTF-8"
of, om op de recente compatibel te zijn met de RC3:
default_charset="iso-8859-1"
daarna:
service apache2 restart

Het resultaat kan je bv zien in bovenvermelde phpinfo()

Powered by WordPress