Sinds ik een nieuwe WAMP heb geïnstalleerd, worden letters als ä, bijv in Märklin, weergegeven als een zwart ruitje met vraagteken. In de tabel staat echter gewoon een ä. Is dit een collatieprobleem en hoe los ik dit op?
Volgens mij zal dat met andere letters met accenten ook wel zo zijn, moet het alleen nog zien.

De tabel staat in utf8_general_ci, de (nieuwe) database in utf8mb4_unicode-ci.
Als ik daar utf8_general_ci van maak, verandert er aan de weergave niets: de ä blijft een zwart ruitje met vraagteken.
Na afsluiten en mySqlAdmin weer openen, staat er als collatie weer utf8mb4_unicode-ci. Wat doe ik niet goed?
Mysql: 3306 staat helemaal bovenin scherm.
Daarom ben ik nog steeds benieuwd naar de 'Karakterset van server' of 'Server charset', volgens je phpMyAdmin.
Als deze in een vorige MySQL/MariaDB installatie afwijkt, dan heb je kans dat je inderdaad verkeerde tekens zal zien.

Verder steun ik Ivo P zijn reactie door ook HeidiSQL aan te raden. Dit is een los programma wat een connectie maakt met MySQL of MariaDB, zonder tussenkomst van PHP of een webserver. Ik gebruik bijna zelden nog phpMyAdmin. Voornamelijk om even snel wat installatiesettings uit te lezen, of het beheer van MySQL/MariaDB zelf op mijn testserver.

Je kan met htmlentities() bepaalde karakters omzetten naar HTML-entities, zoals > wat dan > is.
Maar waarom zou je dit willen? Dit wil je enkel als je HTML-tags onschadelijk wilt maken als je bijvoorbeeld een script wilt bouwen waarmee je wilt dat <strong>vet</strong> niet letterlijk vet wordt gemaakt.

Met de encoding en collations gaat er een wereld voor je open om alle tekens te gebruiken. De functie htmlentities() moet je niet als lapmiddel zien. Vooral omdat dit je tekst verminkt.
maar dat script zal dan ook moeten snappen dat het een ä is....

Je kunt nog kijken of je https://www.php.net/manual/en/book.iconv.php kunt gebruiken om de tekenset te achterhalen.
En evt te converteren.

Vervelende van &amp; in je database zetten, is dat je dat bij het bewerken van je tekst ook weer op moet nemen. En als je er een pdf van maakt je ineens M&auml;rklin in je tekst ziet.

[size=xsmall]Toevoeging op 18/10/2024 18:15:20:[/size]

Ivo P op 18/10/2024 18:14:10

maar dat script zal dan ook moeten snappen dat het een ä is....
(reactie op het zoeken naar script om om te zetten naar &auml;)

Je kunt nog kijken of je https://www.php.net/manual/en/book.iconv.php kunt gebruiken om de tekenset te achterhalen.
En evt te converteren.

Vervelende van &amp; in je database zetten, is dat je dat bij het bewerken van je tekst ook weer op moet nemen. En als je er een pdf van maakt je ineens M&auml;rklin in je tekst ziet.


Snel reageren is lastig, want ik kan niet citeren. Daarom een nieuwe reactie.
Waar heb ik de tekst/speciale tekens ingevoerd? --> in phpMyAdmin de tabellen gevuld. De tabellen hadden collatie utf8_general_ci.

Een html-pagina in juiste tekenset ... weet ik niks van. Sinds in begin jaren 2000 me verdiept heb in html, heb ik me nooit vergewist van tekensets. Bijzondere tekens zoals & of &nbsp; paste ik toe wanneer resultaat afweek van de letter die het moest worden. Krijg nu idee dat ik een tijdmachine vooruit gelanceerd ben. Fred Flinstone in de digitale wereld.
Guus Wiegerinck op 18/10/2024 18:16:11

Snel reageren is lastig, want ik kan niet citeren. Daarom een nieuwe reactie.
Waar heb ik de tekst/speciale tekens ingevoerd? --> in phpMyAdmin de tabellen gevuld. De tabellen hadden collatie utf8_general_ci.


En welke tekenset gebruikte phpmyadmin?
Dat is toch prima zo! Als alles in phpMyAdmin prima staat, maar niet in je PHP-script, dan mis je vermoedelijk de mysqli_set_charset() na je connectie. Wat staat er in phpMyAdmin bij 'Server charset'?
Die staat op West European (latin1)

Nu hebben de tabellen en serververbinding dezelfde collatie, nl utf8_general_ci.
Maar nu heeft de server weer een ander karakterset: w.european (latin1). Hmmm. Maakt het wel ingewikkeld.
Dan is het raadzaam om mijn tip op te volgen, en utf8mb4 te gebruiken in je PHP-script.
Ik kan natuurlijk een if-else-je maken:
"als $merk == M?rklin dan $merk = M&auml;rklin;"
of
"als $merk == Märklin dan $merk = M&auml;rklin;"
Want hoe komt het binnen, ik zie alleen wat er uit komt.

[size=xsmall]Toevoeging op 18/10/2024 18:34:46:[/size]

- Ariën - op 18/10/2024 18:29:19

Dan is het raadzaam om mijn tip op te volgen, en utf8mb4 te gebruiken in je PHP-script.


En alle tabellen de collatie utf8mb4 te geven, toch?

[size=xsmall]Toevoeging op 18/10/2024 18:38:02:[/size]

Guus Wiegerinck op 18/10/2024 18:33:43

Ik kan natuurlijk een if-else-je maken:
"als $merk == M?rklin dan $merk = M&auml;rklin;"
of
"als $merk == Märklin dan $merk = M&auml;rklin;"
Want hoe komt het binnen, ik zie alleen wat er uit komt.


Niet zo handig bij nader inzien. Werkt alleen als inhoud van $merk één woord is. In zinnen moet je eerste zoeken of er een woord is dat ... Toch niet zo simpel



Klopt! De database, tabellen en velden.
Maak wel altijd backups!!

Daarnaast is het zinloos om te controleren op ?, want dat van alles zijn. Verder is het ook onzinnig om HTML-entities te gebruiken omdat je problemen met UTF-8 hebt. Zorg gewoon voor een goede oplossing i.p.v. pleisters plakken waarbij je later daar restanten van zal zien, en je code vervolgens slechter onderhoudbaar wordt.
Dit gebruik ik om te verbinden.

<?php
$SQL_host     = 'localhost';
$SQL_user     = 'username';
$SQL_password = 'password';
$SQL_database = 'database';

$db = new MySQLi( $SQL_host, $SQL_user, $SQL_password, $SQL_database );
$db->set_charset("utf8mb4");
$db->query("SET NAMES utf8mb4 COLLATE utf8mb4_general_ci");
?>


en dit in de <head> van een html pagina

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


daarmee kan je alle codes uit de unicodetabel gebruiken

https://en.wikipedia.org/wiki/List_of_Unicode_characters

Verder heb ik er nooit echt bij stilgestaan. Het staat in menige handleiding of tutorial. Of je verzint het zelf.

Reageren