diakritische tekens als ? weergegeven

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

- DHU -

- DHU -

14/07/2019 19:15:47
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    header ('Content-type: text/html; charset=UTF-8');
?>


en in mijn head section de code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<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
 
PHP hulp

PHP hulp

26/12/2024 12:16:53
 
- Ariën  -
Beheerder

- Ariën -

14/07/2019 19:18:27
Quote Anchor link
Zijn je bestanden ook opgeslagen in UTF-8 encoding? En betreft het alleen uit een database of ook vaste tekst?
 
Thomas van den Heuvel

Thomas van den Heuvel

14/07/2019 19:23:07
Quote Anchor link
Collatie is niet hetzelfde als character encoding.
 
- DHU -

- DHU -

14/07/2019 19:31:15
Quote Anchor link
@Ariën, de vaste teksten worden juist weergegeven. Het lijk er dus op dat het niet goed gaat met de teksten van uit de database. Verder snap ik niet hoe je bestanden op moet slaat als UTF-8 encoding en is dit nog wel relevant als vaste tekst wel goed is maar vanuit de database niet? Geen idee hoor, vraag het maar even voor de zekerheid.


@Thoma, wat is het verschil?
 
- Ariën  -
Beheerder

- Ariën -

14/07/2019 19:34:07
Quote Anchor link
Dan zal je collatie niet goed zijn.
Geef je ook na je connectie mee welke collatie je gebruikt?
 
- DHU -

- DHU -

14/07/2019 20:11:20
Quote Anchor link
In mijn connect.php maak ik inderdaad geen verwijzing naar UTF-8 encoding.

Even wezen googlen leverde onderstaande code op

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

$connection = mysqli_connect("xxxxxxxxx", "xxxxxx", "xxxxxxx");
mysqli->set_charset('utf8');
mysqli->query("SET collation_connection = utf8_general_ci");

if(!$connection){
    echo "Er kan geen connectie met de server worden gemaakt" . die(mysqli_error($connection));;
}

$dbselect = mysqli_select_db($connection, "xxxxxxxx");
if(!$dbselect){
    echo "Er kan geen connectie met de database worden gemaakt" . die(mysqli_error($connection));
}

?>


Maar dat lever de volgende foutmelding op:
<b> Parse error: syntax error, unexpected '->' (T_OBJECT_OPERATOR) in ...... on line 5
</b>

maar weet niet wat ik daar mee aan moet.
 
- Ariën  -
Beheerder

- Ariën -

14/07/2019 20:19:33
Quote Anchor link
Ook objecten zijn variabelen, alleen niet bij jou ;-) (Lijn 5,6)

Verder raad ik aan om geen mengeling met procedureel (functies zoals mysqli_xxx()) en objectgeorienteerd
$conn->query(...) te gebruiken. Liever in objectgeoriënteerde code...

Het kán wel, maar het geeft verwarring door inconsistente syntax.
Gewijzigd op 14/07/2019 20:21:30 door - Ariën -
 
- DHU -

- DHU -

14/07/2019 20:59:41
Quote Anchor link
Ligt dit nu aan mij of tref ik nu alleen maar van die super ingewikkelde dingen aan? Dit gaat voor mij ook al weer wederom hoger wiskunde :-)
Snap d'r geen z*k van....
 
- Ariën  -
Beheerder

- Ariën -

14/07/2019 21:13:08
Quote Anchor link
Super ingewikkeld?
Die oplossing heb ik al gegeven en zelfs onderstreept ;-)

Maar als jij iets ingewikkeld vindt, dan heb ik het idee dat je ergens kennis van mist.
Anyway, je mist een $ van een variabele.

Als je een helder overzicht wilt hebben van object-oriënted en procedural:
Kijk eens hier: https://php.net/mysqli_query
In twee codeblokken zie je de verschillen. Ik raad altijd object-georienteerd aan.
Gewijzigd op 14/07/2019 21:16:47 door - Ariën -
 
- DHU -

- DHU -

14/07/2019 21:21:14
Quote Anchor link
dat ik kennis mis is ongetwijfeld waar.... zal de laatste zijn die dat zal tegenspreken :-)
Maar het enige wat ik onderstreept zie is jouw naam in een melding van het systeem doordat je bericht hebt aangepast.

maar ik zal de plank wel totaal misslaan maar ik zie het niet ..... morgen maar de opticiën.

maar misschien ook een tip... niet iedereen zit op topniveau zoals jullie :-) en zijn still learning
 
- Ariën  -
Beheerder

- Ariën -

14/07/2019 21:27:35
Quote Anchor link
mysqli->set_charset('utf8');

Hier mist een $ omdat het een variabele is, maar dan moet je wel de variabele van je connectie gebruiken. Dat dollarteken heb ik tevens onderstreept in mijn vorige bericht ;-)
Gewijzigd op 14/07/2019 21:35:23 door - Ariën -
 
- DHU -

- DHU -

14/07/2019 21:39:58
Quote Anchor link
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 :-)
 
- Ariën  -
Beheerder

- Ariën -

14/07/2019 21:43:17
Quote Anchor link
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
Gewijzigd op 14/07/2019 21:44:07 door - Ariën -
 
- DHU -

- DHU -

14/07/2019 22:11:40
Quote Anchor link
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...
 
- Ariën  -
Beheerder

- Ariën -

14/07/2019 22:14:48
Quote Anchor link
Kijk, fijn dat het nu wel werkt. :-)
 
- DHU -

- DHU -

14/07/2019 22:33:13
Quote Anchor link
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
 
- Ariën  -
Beheerder

- Ariën -

14/07/2019 22:51:00
Quote Anchor link
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
 
Thomas van den Heuvel

Thomas van den Heuvel

14/07/2019 23:11:05
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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.
Gewijzigd op 14/07/2019 23:19:46 door Thomas van den Heuvel
 
- DHU -

- DHU -

14/07/2019 23:15:12
Quote Anchor link
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
 
- Ariën  -
Beheerder

- Ariën -

14/07/2019 23:18:52
Quote Anchor link
Staan ze niet gewoon in je code na wat gekloot met je coding?
 
Thomas van den Heuvel

Thomas van den Heuvel

14/07/2019 23:21:25
Quote Anchor link
- 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?
Gewijzigd op 14/07/2019 23:28:23 door Thomas van den Heuvel
 

Pagina: 1 2 volgende »



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.