Ik heb even wat hulp nodig want kom er niet uit. Heb inmiddels veel hierover gelezen, maar dat helpt me niet.

Heb een tabel aangemaakt in mySQL:
- Collatie: utf8mb4_unicode_ci
- 2 velden met de collatie utf8mb4_unicode_ci

In een formulier heb ik een bootstrap 3 tekstveld en een instantie van CKeditor 4. Doormiddel van een Ajax call zorg ik dat de data wordt opgeslagen in de database:

$.ajax({
url:'pages/insert.php',
method:'POST',
data:{

Bovenaan de html pagina staat:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="utf-8">

Wanneer ik het woord ëèn via het tekstveld en eveneens via CKeditor op sla in de database zie ik met PHPmyAdmin het woord als volgt terug in de database:

Tekstveld: ëèn
CKeditor: &euml;&egrave;n

Wanneer ik de data weer open in het formulier met een select opdracht zie ik in de CKeditor wel weer gewoon ëèn staan, maar in het tekstveld zie ik net als rechtstreeks in de database staan ëèn.

1) Hoe zou ik dit in de database moeten zien staan? Als de collatie van zowel de tabel als het veld op utf8mb4_unicode_ci staat zou ik denken gewoon ëèn.
2) Hoe kan het dat het resultaat van het tekstveld en de CKeditor verschillend is.

Mogelijk kan iemand me op weg helpen?
Thomas van den Heuvel op 04/08/2020 16:05:38

utf8mb4 is MySQL-specifiek. Dit kun je dus niet instellen in je HTML-document als character encoding!

De huidige meta tag klopt dus niet, en was dus blijkbaar ook totaal niet van invloed op het eindresultaat. Het is (/wordt steeds) waarschijnlijk(er) dat er dus via de webserver een andere standaard character encoding staat ingesteld. Die heb je nu dus blijkbaar expliciet overschreven met je header()-aanroep in PHP.
Dag Thomas,

Ik waardeer het zeer dat je me wilt helpen, en zo veel geduld hebt. Ik hoop dat je begrijpt dat als je niet helemaal thuis bent in de materie van charactersets in combinatie met mySQL dat dit niet makkelijk is.

Ben bang dat ik zelf niet bij de standaard character encoding van de webserver kan om deze aan te passen. Het is een Apache webserver welke ik kan beheren via Plesk. Heb al zitten zoeken maar kan de character encoding niet vinden. Denk dat ik dan bij mijn hoster moet zijn. Zag wel dat ik Additional headers kan toevoegen. Of zou dit in de htaccess file moeten?
Dit kan je inderdaad via .htaccess doen.
Maar met meta-tags en header() heb je, los van de database, al de juiste basis. Let ook op je encoding van je bestand.

Pobeer eerst even een statische mock-up uit te werken, voordat je wat aan het aanklooien bent.
Ik waardeer het zeer dat je me wilt helpen, en zo veel geduld hebt. Ik hoop dat je begrijpt dat als je niet helemaal thuis bent in de materie van charactersets in combinatie met mySQL dat dit niet makkelijk is.

Ik weet dat dit niet eenvoudig is, het heeft mij zelf ook enige tijd gekost. Maar als je dan eenmaal doorhebt wat er allemaal speelt, dan heb je hier in het vervolg waarschijnlijk een stuk minder problemen mee, of is er in ieder geval een stuk grotere bewustwording.

Je had alles in principe al voor elkaar binnen PHP. Dat lijkt mij bij uitstek de plek om dit te regelen, zodat je hier binnen de code zelf rechtstreeks invloed op hebt.

Ik zou dit niet in .htaccess stoppen, omdat dat op die manier al snel een vuilnisbak wordt voor allerlei dingen die je elders, en wat mij bereft op die manier ook netter, kunt regelen. Ook het beheerpaneel is misschien geen goede plek. Beter lijkt mij dat je dit op alle plaatsen expliciet instelt, en het daarmee ook expliciet gedefinieerd is. Dit is ook veel meer "in het zicht" dan dat het weggestopt zit in een configuratiebestand of webserverinstelling.

Gebruik dus gewoon een header() zoals voorheen, als dat werkt. Hiermee heb je op één plek - in PHP zelf - de volledige controle over de output, op het moment dat deze output gegenereerd wordt.

Reageren