Accenttekens in php en mysql

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Chris Martinus

chris Martinus

05/12/2020 22:32:55
Quote Anchor link
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.

Graag advies.
Chris Martinus
 
PHP hulp

PHP hulp

26/12/2024 00:12:31
 
- Ariën  -
Beheerder

- Ariën -

05/12/2020 23:31:17
Quote Anchor link
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.
Gewijzigd op 05/12/2020 23:31:35 door - Ariën -
 
- DHU -

- DHU -

06/12/2020 08:42:30
Quote Anchor link
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:

$connection->set_charset('utf8');
 
- Ariën  -
Beheerder

- Ariën -

06/12/2020 11:10:43
Quote Anchor link
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.

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 -
 
Chris Martinus

chris Martinus

06/12/2020 13:58:36
Quote Anchor link
Aanvulling op mijn vraag:

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
 
- Ariën  -
Beheerder

- Ariën -

06/12/2020 14:26:10
Quote Anchor link
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.
Gewijzigd op 06/12/2020 14:27:18 door - Ariën -
 
Chris Martinus

chris Martinus

06/12/2020 16:37:31
Quote Anchor link
Ja, ik ga het goed bekijken en heb de wijzigingen alleen nog in xampp doorgevoerd.
 
- Ariën  -
Beheerder

- Ariën -

06/12/2020 16:38:28
Quote Anchor link
Welke wijzigingen?

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 -
 

07/12/2020 13:15:44
Quote Anchor link
Vanaf PHP 5.6 is de standaard-encoding veranderd van Latin-1 (ISO-8859-1) naar UTF-8 (Unicode).

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.
Gewijzigd op 07/12/2020 13:16:38 door
 
Chris Martinus

chris Martinus

10/12/2020 16:33:11
Quote Anchor link
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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.