Hoi allemaal,

Wederom een nieuw onderwerp. Diakritische tekens. Hoe weer te geven?

Mijn <b>collatie</b> instelling:
database en alle tabellen staan op utf8_general_ci ingesteld.

In mijn hearder.php staat als allereerste de code, die ik overigens include:

<?php
    header ('Content-type: text/html; charset=UTF-8');
?>


en in mijn head section de code:

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


Maar bij mij blijven de diakritische tekens als ? weergegeven worden. Als je op het forum zoekt gaat het alle kanten uit en wordt het allemaal heel verwarrend. Er is enorm veel over te lezen maar ik lees tussen de regels ook door dat een oplossing niet zo 1,2,3 voor handen is.
Er is geen man over boord of zo hoor maar zou mooi zijn als de tekst op mooie manier wordt weergegeven.

Draai op een normale Windows laptop mijn localhost op een Wampserver
Thnx voor het proberen.... maar ik hou het vraagtekentje er nog maar voorlopig in...
probeer het over 'n tijdje als ik hopelijk wat meer kennis opgedaan heb nog wel eens een keer.. maar voor beginnelingen is dit niet te doen.... moet het ook maar 'n beetje van het freubelen hebben.. niks geen opleiding in deze gehad ...


Toch bedankt Ari?n :-)
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
Wilde je voorstel net gaan toepassen toen ik in phpMyAdmin zag staan dat de Collatie van de serververbinding op utf8mb4_unicode_ci ingesteld stond... dit heb op de database en tabellen overgenomen en nu worden tekens wel juist weergegeven...

blijft ingewikkelde kost hoor.... maar afijn bedankt voor al die handvatten...
Kijk, fijn dat het nu wel werkt. :-)
maar heb nu wel wat ander gecreeerd... de paginas waar ik functies aanroep eindigen die allemaal met de drie karakters: 


'ns kijken of we dat kunnen tackelen
Ik vermoed de B-O-M, oftewel: De byte-order-mark.

Simpele oplossing: Code even kopiëren naar Notepad/kladblok, en opnieuw opslaan als UTF-8. Of anders met je editor opslaan zonder BOM (Byte Order mark).

Zie ook: https://en.wikipedia.org/wiki/Byte_order_mark
Allereerst wat definities.

Character encoding (en ook wel character set of charset)
Dit identificeert de wijze waarop tekst op byteniveau staat opgeslagen, of opgeslagen zou moeten zijn. De encodering bepaalt tevens hoe deze bytes (elk karakter omvat een of meer bytes, de zogenaamde multibyte karakters) geïnterpreteerd dienen te worden als ze weer omgezet moeten worden in leesbare karakters op je scherm.

Als deze dus op een bepaalde wijze staan opgeslagen (zeg character encoding A) en je probeert deze vervolgens te serveren met een andere encoding (zeg encoding B), en er wordt geen (handmatige of automatische) omzetting uitgevoerd van A naar B, dan heb je dus stront op je scherm. Voor een computer hebben deze letters verder geen betekenis. Deze geeft ze enkel weer op de voorgeschreven wijze.

Ook kan het voorkomen dat teksten zijn opgeslagen met een verkeerde encodering, bijvoorbeeld omdat je voorheen vergat om set_charset('utf8') toe te voegen na het maken van een connectie. Op het moment dat je dit dus repareert (je een set_charset() aanroep toevoegt) wordt het pas evident dat de data in je database min of meer corrupt is.

MySQL kent verschillende multibyte encoderingen: utf8, utf8mb, utf16 et cetera. Dit zijn alle subsets van wat UTF-8 omvat. De subset bepaalt de maximum lengte (aantal bytes) van de toegestane symbolen. De ondersteunde charsets zou je kunnen opvragen met:
SHOW CHARACTER SET WHERE Charset LIKE 'utf%';

Hier (interne link) vind je nogmaals een uitleg, zij het op een wat andere manier, wat character encoderingen zijn en hoe je een en ander in goede banen kunt leiden.

Collations
Een collation bepaalt hoe karakters worden vergeleken (wanneer zijn symbolen equivalent) en gesorteerd
(welke symbolenreeks komt alfabetisch voor een andere symbolenreeks bij het sorteren op een tabelkolom). Dit zegt dus niets over hoe deze symbolen zijn geëncodeerd (in het geheugen staan opgeslagen).

Dat gezegd hebbende komt het mij nogal vreemd over dat je een collation instelt na het maken van een connectie. Als het goed is is deze namelijk al in je database-, tabel- en/of kolom-definitie opgenomen. En als deze op een bepaalde plek afwijkt van de default dan kun je in je query met behulp van COLLATE zelf aangeven hoe je tekst wenst te vergelijken of te sorteren.

Maar als je vraagtekens, of als je heel erg je best hebt gedaan van die wiebertjes, op je pagina hebt dan wil dat zeggen dat er dingen inhoudelijk mis zijn qua codering van je teksten. Ik neem aan dat alle tabeldefinities ook echt als utf8 of equivalent zijn aangemaakt?

Zonder details wordt dit nogal lastig om op te lossen omdat je eerst een analyse (debugging :p) moet maken van wat er aan de hand is, daarna kun je pas een remedie opstellen.

- 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.
done via Kladblok (blijf trouwens het mooiste Windows progje)... maar geen resultaat..
heeft op moment niet mijn hoogste focus.... maar de tekentjes vallen op :-)... ze horen er per slot van rekening niet
Staan ze niet gewoon in je code na wat gekloot met je coding?
- Ariën - op 14/07/2019 23:18:52
gekloot met je coding

Dit is waarschijnlijk de voornaamste oorzaak reden voor het omschreven probleem :).

Als je niet weet wat er misgaat, hoe kun je dan inschatten wat het effect van een verandering is? Wat ben je dan precies aan het repareren?

Reageren