diakritische tekens als ? weergegeven
wanneer ik de code
weer weghaal verdwijnen ook die tekentjes weer maar heb ik mijn ? weer terug.
Het maakt ook niet uit of ik de colltie van utf8mb4_unicode_ci naar utf8mb4_generaal_ci... effect is hetzelfde
Thomas van den Heuvel op 14/07/2019 19:23:07:
Collatie is niet hetzelfde als character encoding. (ook charset)
Dus laat die charset voor PHP lekker zoals het UTF-8 is.
Gewijzigd op 15/07/2019 00:44:09 door - Ariën -
vorige uitgebreide reactie (interne link) (nogmaals).
De data in je database heeft waarschijnlijk mankementen.
Lees mijn De data in je database heeft waarschijnlijk mankementen.
Gewijzigd op 15/07/2019 01:03:23 door Thomas van den Heuvel
Thomas van den Heuvel op 14/07/2019 23:11:05:
Nee, er is echt ergens iets mis met de data zelf, of hoe je deze benadert, of allebei. Dit heeft niets met collation te maken.
- Ariën - op 14/07/2019 21:43:17:
Met een ? vermoed ik dat je collatie niet klopt, en dat je een teken gebruikt die deze collatie niet kent. Gebruik eens: utf8mb4_general_ci
Nee, er is echt ergens iets mis met de data zelf, of hoe je deze benadert, of allebei. Dit heeft niets met collation te maken.
Als ik zo lees was dat toch wel de oorzaak. Maar dan ga ik niet van een geruit vraagteken uit. Ik meen dat je dat enige tijd geleden nog zo iets hebt gezegd in een topic hier. Het probleem met de vraagtekens die de topicstarter omschrijft vond alleen in MySQL plaats.
Gewijzigd op 15/07/2019 01:19:50 door - Ariën -
De beschikbare/geldige/toepasbare collations hangen overigens van de character encoding af. Je kunt uiteraard geen collation gebruiken die niet aansluit op je character encoding... Dat lijkt mij duidelijk.
EDIT: okay laten we even van aanpak veranderen want dit is weer zo'n vraag waarbij er heeeeeeeeeeeelemaal aan het einde iets misgaat, terwijl er nog tig tussenstappen zijn. Tijd om het een en ander uit te gaan sluiten.
Gebruik de volgende code om het stuk tekst met kuren op te hoesten:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
// debugging modus
error_reporting(E_ALL);
ini_set('display_startup_errors', true);
ini_set('display_errors', 'stdout');
// hulpfunctie voor escapen html-functionaliteit
function escape($in) {
return htmlspecialchars($in, ENT_QUOTES, 'UTF-8');
}
// je zou kunnen volstaan met de metatag, maar nogmaals, ten overvloede
header('Content-Type: text/html; charset=UTF-8');
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>UTF-8 test</title>
</head>
<body><?php
$db = new mysqli('host', 'username', 'password', 'database');
$db->set_charset('utf8');
$res = $db->query('haal hier de bewuste tekst op');
$row = $res->fetch_assoc();
// geef de tekst als platte tekst weer
echo escape($row['kolomnaam']);
?>[end]</body>
</html>
// debugging modus
error_reporting(E_ALL);
ini_set('display_startup_errors', true);
ini_set('display_errors', 'stdout');
// hulpfunctie voor escapen html-functionaliteit
function escape($in) {
return htmlspecialchars($in, ENT_QUOTES, 'UTF-8');
}
// je zou kunnen volstaan met de metatag, maar nogmaals, ten overvloede
header('Content-Type: text/html; charset=UTF-8');
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>UTF-8 test</title>
</head>
<body><?php
$db = new mysqli('host', 'username', 'password', 'database');
$db->set_charset('utf8');
$res = $db->query('haal hier de bewuste tekst op');
$row = $res->fetch_assoc();
// geef de tekst als platte tekst weer
echo escape($row['kolomnaam']);
?>[end]</body>
</html>
NB deze snippet zou je voor meer debugging-werkzaamheden kunnen gebruiken...
Mocht de tekst niet goed worden weergegeven dan zul je de oorzaak en oplossing in de database moeten zoeken. Er is dan eerst een verdere analyse nodig van de tabelstructuur en de data in deze tabellen om zinnige uitspraken te kunnen doen over wat er aan de hand is.
Gewijzigd op 15/07/2019 15:26:08 door Thomas van den Heuvel
Thomas van den Heuvel op 15/07/2019 02:10:03:
Mja, en dat heeft van doen met de character encoding. Collation heeft op geen enkele manier invloed op (on)juiste weergave van tekst. Collation houdt zich enkel bezig met het vergelijken en sorteren van teksten.
De beschikbare/geldige/toepasbare collations hangen overigens van de character encoding af. Je kunt uiteraard geen collation gebruiken die niet aansluit op je character encoding... Dat lijkt mij duidelijk.
EDIT: okay laten we even van aanpak veranderen want dit is weer zo'n vraag waarbij er heeeeeeeeeeeelemaal aan het einde iets misgaat, terwijl er nog tig tussenstappen zijn. Tijd om het een en ander uit te gaan sluiten.
Gebruik de volgende code om het stuk tekst met kuren op te hoesten:
NB deze snippet zou je voor meer debugging-werkzaamheden kunnen gebruiken...
Mocht de tekst niet goed worden weergegeven dan zul je de oorzaak en oplossing in de database moeten zoeken. Er is dan eerst een verdere analyse nodig van de tabelstructuur en de data in deze tabellen om zinnige uitspraken te kunnen doen over wat er aan de hand is.
De beschikbare/geldige/toepasbare collations hangen overigens van de character encoding af. Je kunt uiteraard geen collation gebruiken die niet aansluit op je character encoding... Dat lijkt mij duidelijk.
EDIT: okay laten we even van aanpak veranderen want dit is weer zo'n vraag waarbij er heeeeeeeeeeeelemaal aan het einde iets misgaat, terwijl er nog tig tussenstappen zijn. Tijd om het een en ander uit te gaan sluiten.
Gebruik de volgende code om het stuk tekst met kuren op te hoesten:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
// debugging modus
error_reporting(E_ALL);
ini_set('display_startup_errors', true);
ini_set('display_errors', 'stdout');
// hulpfunctie voor escapen html-functionaliteit
function escape($in) {
return htmlspecialchars($in, ENT_QUOTES, 'UTF-8');
}
// je zou kunnen volstaan met de metatag, maar nogmaals, ten overvloede
header('Content-Type: text/html; charset=UTF-8');
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>UTF-8 test</title>
</head>
<body><?php
$db = new mysqli('host', 'username', 'password', 'database');
$db->set_charset('utf8');
$res = $db->query('haal hier de bewuste tekst op');
$row = $res->fetch_assoc();
// geef de tekst als platte tekst weer
echo escape($row['kolomnaam']);
?>[end]</body>
</html>
// debugging modus
error_reporting(E_ALL);
ini_set('display_startup_errors', true);
ini_set('display_errors', 'stdout');
// hulpfunctie voor escapen html-functionaliteit
function escape($in) {
return htmlspecialchars($in, ENT_QUOTES, 'UTF-8');
}
// je zou kunnen volstaan met de metatag, maar nogmaals, ten overvloede
header('Content-Type: text/html; charset=UTF-8');
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>UTF-8 test</title>
</head>
<body><?php
$db = new mysqli('host', 'username', 'password', 'database');
$db->set_charset('utf8');
$res = $db->query('haal hier de bewuste tekst op');
$row = $res->fetch_assoc();
// geef de tekst als platte tekst weer
echo escape($row['kolomnaam']);
?>[end]</body>
</html>
NB deze snippet zou je voor meer debugging-werkzaamheden kunnen gebruiken...
Mocht de tekst niet goed worden weergegeven dan zul je de oorzaak en oplossing in de database moeten zoeken. Er is dan eerst een verdere analyse nodig van de tabelstructuur en de data in deze tabellen om zinnige uitspraken te kunnen doen over wat er aan de hand is.
Sorry voor de late reactie maar was met vakantie.. wilde dit weer oppakken.... mbv deze snippet... pats boem tjakka... heb ik dit kunnen oplossen....
Thanks Thomas.....