[PHP] ucwords() vraagje

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • void
  • Registratie: September 2000
  • Laatst online: 08-12-2023
Ik ben bezig om een scriptje te maken waarin ook namen worden opgeslagen. Om een en ander netjes te houden sla ik ze op in lowercase. Daarna haal ik de naam op en gebruik ik ucwords() om van de eerste letters van de naam hoofdletters te maken.
Nu gebeurt er bij namen waarin een accent voorkomt het volgende:

Als naam wordt ingevoerd:
voornaam: Hans
achternaam: Gören

Dit gaat als voornaam=hans achternaam=gören de database in (lowercase via strtolower().). Als ik het erna eruit haal en de naam uitdraai als:

voornaam: ucwords($voornaam)
achternaam: ucwords($achternaam)

Dan is het resultaat: Hans GöRen

Ucwords ziet die ö als het einde van het woord of als en niet alfabetisch karakter. Iemand enig idee hoe ik dit kan voorkomen?

Le peintre de l'espace se jette dans le vide! (Y.Klein 1960)


Acties:
  • 0 Henk 'm!

  • TRON
  • Registratie: September 2001
  • Laatst online: 16-09 13:13
PHP:
1
2
3
4
5
6
7
<?PHP
$string=ucwords($string); 
//Bugfix from here on 
for($i=0;$i<strlen($string);$i++) 
    if((ctype_upper($string[$i]) &&( $string[$i-1]==" " || $i==0 ))!=TRUE) 
        $string[$i]=strtolower($string[$i]); 
php?>
Lost je probleem wel op.

Leren door te strijden? Dat doe je op CTFSpel.nl. Vraag een gratis proefpakket aan t.w.v. EUR 50 (excl. BTW)


Acties:
  • 0 Henk 'm!

  • Johnny
  • Registratie: December 2001
  • Laatst online: 17-09 16:59

Johnny

ondergewaardeerde internetguru

Met ucfirst() maakt PHP alleen de eerste letter van de hele string groot.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Geen idee of het alleen tijdens het displayen met hoofdletter moet, maar dan zou je eventueel ook CSS ( text-transform: capitalize; ) kunnen gebruiken....

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • eborn
  • Registratie: April 2000
  • Laatst online: 19:03
Kun je niet gewoon ucfirst() gebruiken? Een achternaam is in principe toch maar één woord, toch? En anders kun je eens kijken of je iets met locales kunt aanpassen. De PHP-doc heeft het namelijk over white-space karakters. Misschien dat je huidige locale hiermee vreemde dingen uithaalt?

En anders is het een bug ;)

Acties:
  • 0 Henk 'm!

  • TRON
  • Registratie: September 2001
  • Laatst online: 16-09 13:13
@Johnny: En dat is nou net niet zijn bedoeling :)

Leren door te strijden? Dat doe je op CTFSpel.nl. Vraag een gratis proefpakket aan t.w.v. EUR 50 (excl. BTW)


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:47
Uit de PHP manual over ucfirst:
Note that 'alphabetic' is determined by the current locale. For instance, in the default "C" locale characters such as umlaut-a (ä) will not be converted.
Overigens is het praktisch onmogelijk om dit voor alle namen altijd goed te doen, tenzij je weet bij wat voor locale elke naam hoort (en dus per naam een andere locale instelt). Interessant zijspoor uit The Old New Thing:
Every locale has its own case-mapping rules. Many of them are in conflict with the rules for other locales. For example, which of the the following pairs of words compare case-insensitive equal?
1. gif GIF
2. Maße MASSE
3. Maße Masse
4. même MEME

Answers:
1. no in Turkey, yes in US
2. no in US, yes in Germany
3. no in US, no in Germany, yes in Switzerland! (Though you would likely never see it written as "Maße" in Switzerland.)
4. yes in France, no in Quebec!
eborn schreef op 06 november 2003 @ 16:22:
Kun je niet gewoon ucfirst() gebruiken? Een achternaam is in principe toch maar één woord, toch?
En oer-Hollandse namen als "de Boer" dan? Trouwens zijn er ook vervelende mensen die "Jan-willem" heten, met een grote 'J' en een kleine 'w' dus, terwijl andere mensen dan weer wel die 'W' in een hoofdletter willen hebben. Je kunt het zelf dus nooit goed doen; als het even kan zou ik dus de geprefereerde manier opslaan in de database en waar nodig naar lowercase converteren (wat, zoals al uit de quote van Raymond Chen blijkt, ook al niet goed mogelijk is, maar misschien voor jouw doeleinden beter geschikt is).

[ Voor 31% gewijzigd door Soultaker op 06-11-2003 17:05 ]

Pagina: 1