Avatar billede troelss Nybegynder
23. august 2006 - 15:27 Der er 19 kommentarer og
1 løsning

Alternativ til ucfirst mht. danske bogstaver

Hej eksperter.

Jeg har navnene på mine sider i et array:
<?
$menu1 = array(
    "index",
    "nyheder",
    "links",
    "b[o]ger",
    "[o]nsker"
);
?>

samt en funktion som laver linket og derefter udskriver 'titlen' på linket:

<?
echo "&nbsp;<a href='$punkt.php'>";
$punkt = str_replace("[o]","ø",$punkt);
$punkt = str_replace("_"," ",$punkt);
echo ucfirst($punkt);
?>

Men ø kommer (sikkert af gode grunde) ikke til at stå med stort.
Er der en måde at gøre det på? (Evt. så det også virker på æ og å, hvis jeg skulle bruge dem i fremtiden.
Avatar billede zynzz Praktikant
23. august 2006 - 15:58 #1
http://dk.php.net/manual/da/function.strtolower.php

Men kan slet ikke se det burde være et problem...
Avatar billede zynzz Praktikant
23. august 2006 - 15:59 #2
Altså ucfirst laver så det bliver et stort bogstav først...
Avatar billede troelss Nybegynder
23. august 2006 - 16:14 #3
Det forstod jeg ikke.

Jeg har to punkter i mit array b[o]ger og [o]nsker. bår jeg kører dem igennem min kode bliver de til Bøger og ønsker.
Ucfirst laver skriver altså "ønsker" og ikke "Ønsker".

Hvad skal jeg med strtolower?
Avatar billede troelss Nybegynder
23. august 2006 - 16:15 #4
(det gik lidt hurtigt, se venligst bort fra slåfejl)
Avatar billede zynzz Praktikant
23. august 2006 - 17:06 #5
Nej, ucfirst er den funktion du leder efter så...
Avatar billede zynzz Praktikant
23. august 2006 - 17:07 #6
Men hvad er så dit problem ?
Avatar billede troelss Nybegynder
23. august 2006 - 17:21 #7
Når jeg bruger ucfirst på et ord som starter med ø, bliver startbogstaver (ø) ikke stort (Ø).
Avatar billede Slettet bruger
23. august 2006 - 17:29 #8
Mon ikke det er fordi PHP er sat til dens standard (amerikansk) locale, så den ikke ser æøå som bogstaver men som specialtegn?

Prøv at se på http://dk.php.net/setlocale
Og bemærk, at det er LC_CTYPE som er relevant i dette tilfælde.
Avatar billede zynzz Praktikant
23. august 2006 - 17:29 #9
setlocale(LC_ALL, 'danish');
Avatar billede Slettet bruger
23. august 2006 - 17:38 #10
Lige nøjagtig hvad den relevante locale hedder, er desværre systemspecifikt. På nogle maskiner kan den hedde "danish", på andre "da_DK" eller "da_DK.iso-8859-1" eller lignende.

Og LC_ALL har også effekt på f.eks udskrift af datoer (måneder og ugedage får danske navne) og kommatal bliver med komma i stedet for punktum.

LC_CTYPE har kun effekt på PHPs opfattelse af, hvad der er bogstaver og hvilke store og små bogstaver, der hører sammen.
Avatar billede troelss Nybegynder
23. august 2006 - 17:39 #11
Okay.
Er det en kostant ændring?

Altså:
Skal jeg køre setlocale(); hver gang før jeg kan bruge dansk, eller
Skal jeg bare køre den én gang og så er det standard?
Avatar billede zynzz Praktikant
23. august 2006 - 17:40 #12
Ja, det er rigtigt... LC_ALL er alle de andre typer incl.
Avatar billede zynzz Praktikant
23. august 2006 - 17:41 #13
<?
setlocale(LC_CTYPE, 'danish');
echo "&nbsp;<a href='$punkt.php'>";
$punkt = str_replace("[o]","ø",$punkt);
$punkt = str_replace("_"," ",$punkt);
echo ucfirst($punkt);
?>
Avatar billede troelss Nybegynder
23. august 2006 - 17:49 #14
Det hjalp.

Det var vidst dig, sandbox, som gav løsningen, så pointene går til dig. (hvis du lige smider et svar...)
Avatar billede Slettet bruger
23. august 2006 - 17:53 #15
Ændringen gælder for den aktuelle proces. Dette vil (afhængigt af serveropsætning) betyde enten kun dette script indtil det er færdigt, eller (hvis serveren kører flere scripts som tråde i samme process) alle scripts kørt af den tråd.
Avatar billede troelss Nybegynder
24. august 2006 - 00:42 #16
Tak
Avatar billede Slettet bruger
24. august 2006 - 00:54 #17
Men som sandbox siger, hvordan finder man så ud af om det hedder "danish", "da_DK", "da_DK.iso-8859-1" eller noget helt andet?
Avatar billede Slettet bruger
24. august 2006 - 01:19 #18
Prøver sig frem ;-)

Eller kører denne (hvis maskinen er unix-lignende):

<?php
system('locale -a');
?>
Avatar billede Slettet bruger
24. august 2006 - 09:48 #19
Dem jeg har som er danske er:
da_DK
da_DK.iso88591
da_DK.iso885915
da_DK.utf8
danish
dansk

Hvad skal jeg så vælge?
Avatar billede Slettet bruger
24. august 2006 - 11:13 #20
De, der hedder da_DK, danish og dansk er sandsynligvis bare alias for den af da_DK.tegnsæt som bruger systemets standardtegsæt.

Jeg ville vælge en af dem med specificeret tegnsæt - og vel at mærke den, der passer til det tegnsæt, der i forvejen bruges på websiderne.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester