Accenttekens in php en mysql
Ik wil een tekst met accenttekens vanuit php invoeren in mysql.
Bijvoorbeeld: 'Privé'
echo 'Privé'; heeft als resultaat: Priv�
Invoeren in mysql geeft het resultaat: Priv?
$veld1 = 'Privé';
$query = "INSERT INTO test (veld1) VALUES ('$veld1')";
$result = $link->query($query);
In de lagere php- en mysql-versie werkte dit probleemloos.
Nu speur ik naar oplossingen, maar heb ze tot op heden nog niet gevonden.
header('content-type: text/html; charset=windows-1252');
is een oplossing voor het weergeven in de php weergave van: echo 'Privé';
charset als utf8 hebben geen effect.
Graag advies.
Chris Martinus
- Je characterset / collation in je database is aangepast.
- De characterset van de bestanden zijn aangepast.
- De data is met een foute charset / collation opnieuw geïmporteerd.
Een ding is wel zeker: Het komt niet enkel door een upgrade van PHP/MySQL.
Ik vermoed eerder dat je database niet goed geïmporteerd is, bij een serveraanpassing.
Gewijzigd op 05/12/2020 23:31:35 door - Ariën -
$connection->set_charset('utf8');
Het beste is om zorgvuldig uit te zoeken wat er in zulke gevallen precies mis gaat, en niet overhaast meteen zomaar functies toe te passen.
Zoek in dit forum ook eens naar wat reacties van Thomas van de Heuvel over dit onderwerp. Hij heeft vaak goede uitleg gegeven over UTF8 en de werking ervan.
Zie ook dit topic:
https://www.phphulp.nl/php/forum/topic/diakritische-tekens-als-weergegeven/103004/1/
En deze reactie: https://www.phphulp.nl/php/forum/topic/diakritische-tekens-als-weergegeven/103004/1/#744639
En deze is ook super-interessant bij het tackelen: https://www.phphulp.nl/php/forum/topic/probleem-met-htmlentities/97671/1/#702128
Gewijzigd op 06/12/2020 16:38:12 door - Ariën -
Ik zal de andere suggesties goed gaan bestuderen en alvast dank hiervoor.
Met de regel: $veld1 = htmlentities($veld1, ENT_QUOTES, "windows-1252");
lijkt het probleem zowel in de weergave in php als in mysql te zijn opgelost.
Ik weet niet of dit een schoonheidsprijs verdient, maar het werkt.
Hierna ga ik verder uitzoeken of het met andere charsets ook succesvol is.
Chris Martinus
Want ik heb het idee dat je nu rücksichtslos maar wat lijkt te proberen? Ik zou eerder in de hoek gaan zoeken van een foute import van je database als het opeens gebeurt. Een PHP of MySQL update zou geen invloed mogen hebben op een character-encoding.
Het laatste wat je wilt is een database met een mengeling van juiste en corrupte data.
Gewijzigd op 06/12/2020 14:27:18 door - Ariën -
Ja, ik ga het goed bekijken en heb de wijzigingen alleen nog in xampp doorgevoerd.
Overigens heb ik onderaan mijn post van 11:10:43 nog een derde en interessant linkje geplaatst.
Gewijzigd op 06/12/2020 16:39:03 door - Ariën -
htmlentities() is niet de oplossing, er is nog werk te doen:
- of je vertelt PHP dat het toch moet werken met Latin-1
https://www.php.net/manual/en/ini.core.php#ini.default-charset
- of je past je code aan zodat het werkt met UTF-8
https://www.phphulp.nl/php/tutorial/php-algemeen/unicode-enzo/831
We horen graag welke keuze je hebt gemaakt en hoe het wil lukken.
Ik had al ontdekt dat het m.i.v. 5.6.29 anders was.
PHP 5.3.55 default_charset no value
PHP 5.6.29 default_charset UTF-8
Ook met de laatste reactie ga ik aan de slag.
De stukjes van Thomas van de Heuvel gaven meer inzicht.
Schematisch is de communicatie als volgt:
database <--> webserver <--> browser
Ik ontdek dat de communicatie tussen php en de browser de bron van de problemen is.
De collaties van de database en webserver zijn gelijk UTF-8 Unicode (utf8mb4)
https://www.phphulp.nl/php/tutorial/php-algemeen/unicode-enzo/831
krijgt alle aandacht.