Avatar billede sthen Nybegynder
13. november 2004 - 01:36 Der er 17 kommentarer og
1 løsning

strtolower() virker ikke altid - hvorfor?

Har et udtræk fra en database, hvori brugerne indtaster navn, adresse m.m.
For at få et pænt overblik over samtlige brugere, bruger jeg:
echo ucwords(strtolower($data['navn']));
- da jeg ønsker at tage højde for at folk af og til taster alt med caps slået til.
Dette virker i reglen også efter hensigten UNDTAGEN hvis personen har et Æ,Ø eller Å som skal ændres til små bogstaver - så vedbliver disse bogstaver at være store.
Hvad gør jeg så?
Avatar billede jaw Nybegynder
13. november 2004 - 02:50 #1
Tjah, ved ikke helt hvad du gør forkert... Nu har jeg prøvet mange forskellige brugernavne hos mig, og lige meget hvilke Æ, Ø og Å jeg bruger, så funker ucwords(strtolower()); fint hos mig... Kan du give et eksempel?
Avatar billede cool_casper Nybegynder
13. november 2004 - 04:33 #2
"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."
Altså hvis du kører på en engelsk server og vil det ikke virke med f.eks. Æ, Ø og Å. Grunden til at jaw kan gøre det er formodentlig fordi han har dansk server. :)
http://php.net/ucfirst

Prøv med mb_strtolower() som ikke tager højde for Unicode karakterer:
echo ucwords(mb_strtolower($data['navn']));
http://php.net/mb_strtolower
Avatar billede jaw Nybegynder
13. november 2004 - 04:35 #3
Det er det jo nok :)
Avatar billede hmortensen Nybegynder
13. november 2004 - 08:22 #4
Du kan bruge setlocale.
Hvis serveren kører freebsd:
setlocale (LC_CTYPE, 'da_DK.ISO8859-1');

Du kan se hvilket system serveren kører, ved lave en phpinfo.
Avatar billede bojo Nybegynder
13. november 2004 - 09:35 #5
hvis dansk ikke er installeret på din server, kan det løses med

$txt = strtolower( str_replace( array("Æ","Ø","Å"), array("æ","ø","å"), $txt  ) );
Avatar billede hmortensen Nybegynder
13. november 2004 - 09:48 #6
Chancen for at dansk ikke ligger på serveren er minimal. Dog hedder den noget forskelligt i de forskellige distroer
Avatar billede bojo Nybegynder
13. november 2004 - 09:52 #7
hvis man er hosted hos Freepaq er der ikke dansk, det gælder muligvis ikke alle deres servere, men den jeg leger med desværre :-(
Avatar billede bojo Nybegynder
13. november 2004 - 10:08 #8
hmortensen < rettelse, på Freepaq virker strtolower det er vist "kun" dag/måned der er ged i
Avatar billede hmortensen Nybegynder
13. november 2004 - 10:30 #9
bojo, hvad gør du for at udskrive dansk dag/måned ?
Avatar billede bojo Nybegynder
13. november 2004 - 12:42 #10
:-) måske et svar her, så må jeg jo oprette et spg.
<?
echo "Locale er: " . setlocale( LC_ALL, "da", "dan", "da_DK", "danish" )."<br />";
echo date("l d. F")."<br />";
echo strftime("%A %d %B")."<br />";
?>

output:

Locale er:
Saturday 13. November
Saturday 13 November
Avatar billede hmortensen Nybegynder
13. november 2004 - 12:46 #11
setlocale(LC_TIME, "da_DK.ISO8859-1");
echo strftime("%A %B");

Gir:
lørdag november

Du skal nok bruge da_DK.ISO8859-1
Avatar billede bojo Nybegynder
13. november 2004 - 13:09 #12
spg oprettet, kom og svar :-)
Avatar billede sthen Nybegynder
13. november 2004 - 16:27 #13
Hej igen.
Var nødt til at gå i seng i går, og er nu kommet hjem fra arbejde.
Prøver de forskellige løsninger i kommer med, og vender så tilbage.
Avatar billede sthen Nybegynder
13. november 2004 - 16:42 #14
>> bojo

Denne:
$txt = strtolower( str_replace( array("Æ","Ø","Å"), array("æ","ø","å"), $txt  ) );
virkede efter hensigten.
Læg et svar.

>> cool_casper
mb_strtolower gav "call to undefined function til trods for at serveren kører PHP 4.3.4, og din funktion burde jo fungere fre ver. 4.3.0 og op.
Det forstår jeg ikke.
Server: gratisserver hos www.1go.dk
Avatar billede bojo Nybegynder
13. november 2004 - 18:35 #15
nej tak :-)
Avatar billede hmortensen Nybegynder
13. november 2004 - 19:15 #16
Det er bare at sætte setlocale(), så kan du sagtens bruge strtolower() og ucwords()
Avatar billede sthen Nybegynder
14. november 2004 - 23:05 #17
OK
Avatar billede bojo Nybegynder
14. november 2004 - 23:08 #18
prøv hmortensens setlocale(LC_TIME, "da_DK.ISO8859-1"); den virkede her
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