Ik ben overgegaan van php 5.3 naar 7.2.34 en mysql 5.0.12
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.
Hier valt geen eenduidig antwoord op te geven. Dit kan diverse oorzaken hebben, waaronder:
- 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.
Ik weet niet of het voor jou de solution maark heb er destijds ook behoorlijk mee lopen stommelen maar voor mij was uiteindelijk de oplossing dat ik mijn connect.php een set_charset heb toegevoegd:
Dat is wel iets dat je serieus moet onderzoeken. Je wilt niet je data vernachelen door opeens aan te geven dat je utf8 wilt gaan 'spreken'.
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.
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.
Heb je de linkjes al gelezen?
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.
Bedankt.
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.