ucfirst() met speciale karakters

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Daan Vee

Daan Vee

23/03/2018 14:57:57
Quote Anchor link
Mijn script zet namen om in hoofdletters:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$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?
 
PHP hulp

PHP hulp

29/03/2024 11:28:29
 
- Ariën  -
Beheerder

- Ariën -

23/03/2018 15:04:16
Quote Anchor link
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?
Gewijzigd op 23/03/2018 15:07:46 door - Ariën -
 
Daan Vee

Daan Vee

23/03/2018 16:17:28
Quote Anchor link
Ik heb het volgende geprobeerd:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
mb_strtoupper($naaminbeeld);


en:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
mb_strtoupper($naaminbeeld, 'UTF-8');


Maar bij beide krijg ik speciale karakters nog in kleine letters te zien... Iemand?
 
- Ariën  -
Beheerder

- Ariën -

23/03/2018 16:22:43
Quote Anchor link
Dat is apart. In de sandbox die ik gebruik juist niet:

https://3v4l.org/SlKgm
 
Thomas van den Heuvel

Thomas van den Heuvel

23/03/2018 17:21:36
Quote Anchor link
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 56616AC3A86E20426F6D656E (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 56616AE86E20426F6D656E (als je nog met ISO-charsets werkt) moeten luiden.
Gewijzigd op 23/03/2018 17:28:57 door Thomas van den Heuvel
 
Daan Vee

Daan Vee

23/03/2018 19:40:30
Quote Anchor link
Hoi Thomas, thanks!

Het luidt idd: 56616AC3A86E20426F6D656E

Hoe kan ik de data goed encoderen?
 
- Ariën  -
Beheerder

- Ariën -

23/03/2018 19:48:17
Quote Anchor link
Gebruik je netjes UTF-8 headers?
 
Thomas van den Heuvel

Thomas van den Heuvel

23/03/2018 20:54:57
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
header('Content-Type: text/html; charset=UTF-8');
?>

Of in je head-tag, bij voorkeur voor enige "content" zoals een title-tag:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<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;
Gewijzigd op 23/03/2018 21:09:33 door Thomas van den Heuvel
 
- Ariën  -
Beheerder

- Ariën -

23/03/2018 21:49:52
Quote Anchor link
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.
 
Thomas van den Heuvel

Thomas van den Heuvel

23/03/2018 22:07:19
Quote Anchor link
Waarschijnlijk gaat het om het visuele effect omdat $naaminbeeld hoogstwaarschijnlijk al een samenraapsel is van voornaam, tussenvoegsels en achternaam (althans dat mogen we hopen :)).
 
Daan Vee

Daan Vee

24/03/2018 09:13:14
Quote Anchor link
Ik heb het voorbeeld van Arien gebruikt, en het werkt. Dank!
 



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.