Mijn script zet namen om in hoofdletters:


$naaminbeeld = ucfirst(strtoupper($naaminbeeld));


Maar waarom wordt een naam als Vajèn Bomen omgezet naar: VAJèN BOMEN en niet naar: VAJÈN BOMEN?
En hoe zorg ik dat dat wel gebeurt?
Hm... Zou dit niet met UTF-8 te maken hebben?

mb_strtoupper() zou mogelijk wel werken?
Maar waarom gebruik je na je strtoupper nog een ucfirst? Je hebt overal al de hoofdletters, dus waarom zou je het nogmaals proberen op de eerste letters?
Ik heb het volgende geprobeerd:


mb_strtoupper($naaminbeeld);


en:


mb_strtoupper($naaminbeeld, 'UTF-8');


Maar bij beide krijg ik speciale karakters nog in kleine letters te zien... Iemand?
Welkom in de wondere wereld van character encoderingen.

Hoe luidt de waarde van strtoupper(bin2hex($naaminbeeld)) van de naam "Vajèn Bomen"?

Als deze verschilt van 56616[color=#ff0000]AC3A[/color]86E20426F6D656E (edit: er vanuit gaande dat je overal netjes UTF-8 gebruikt) dan is je data verkeerd geëncodeerd, wat mogelijk kan verklaren waarom een niet herkenbaar karakter niet vertaald wordt naar zijn uppercase equivalent.

NB de latin1 variant zou 56616[color=#ff0000]AE[/color]86E20426F6D656E (als je nog met ISO-charsets werkt) moeten luiden.
Hoi Thomas, thanks!

Het luidt idd: 56616AC3A86E20426F6D656E

Hoe kan ik de data goed encoderen?
Gebruik je netjes UTF-8 headers?
AC3A is correct (UTF-8). De è zou dan gewoon in een È veranderd moeten worden.

Wellicht is er iets anders aan de hand? Bestand of code niet goed geupdate? Kijk je per ongeluk op de verkeerde plaats? Verouderde pagina-cache? Iets anders?

Zoals @Ariën aangeeft: stel je een character encoding in op je webpagina via een meta-tag of PHP header()?

In PHP, voor enige output:
<?php
header('Content-Type: text/html; charset=UTF-8');
?>

Of in je head-tag, bij voorkeur voor enige "content" zoals een title-tag:
<meta charset="UTF-8">

(niet dat dit laatste echt uit zou moeten maken, maar wel zo netjes voor juiste interpretatie van de inhoud van je documenten)

Alternatieven (al is het vreemd dat mb_strtoupper() niet werkt, het is wel verstanding om altijd een encoding mee te geven lees ik op meerdere plaatsen):
- mb_convert_case($input, MB_CASE_UPPER, 'UTF-8')
- of met css :D via text-transform: uppercase;
Ik merk dat op één van mijn server dat ik met mb_strupper ook niet het gewenst resultaat krijg, wat ik in de 3v4l-sandbox wel krijg.

Blijkbaar staat er iets van een mb_string extensie uit. Dit kan je even controleren.
Let er wel op dat de CSS-mogelijkheid met de property text-transform alleen interessant is voor het visuele effect. Opslaan zou ik liever ook doen in rauw formaat.
Waarschijnlijk gaat het om het visuele effect omdat $naaminbeeld hoogstwaarschijnlijk al een samenraapsel is van voornaam, tussenvoegsels en achternaam (althans dat mogen we hopen :)).
Ik heb het voorbeeld van Arien gebruikt, en het werkt. Dank!

Reageren