Avatar billede mtrolle Nybegynder
05. oktober 2004 - 16:36 Der er 43 kommentarer og
2 løsninger

Alle bogstaver små, undtagen begyndelses bogstav

Hej :)

Jeg har en masse tekster (titler) hvor alle bogstaver er store fx "HEJ ALLE SAMMEN"
Dem vil jeg gerne lave om til små bogstaver, med stort begyndelses bogstav, fx: "Hej Alle Sammen"

Det kan jeg også sagtens således:
echo strtolower(ucwords($var));
Men, ucwords kan ikke rigtig finde ud af af æøå og é og sådanne tegn, hvilket resultere i at et titel som "PÅ HALEN PÆLLE" bliver til "PÅ Halen PÆlle" og det er jo endnu værre end før :)
Så tænkte jeg jeg bare kunne lave en ereg_replace("Å","å",$var) men det er bare ikke optimalt det der jo også findes titler som "Åse den smukke" el. lign. :)

Hvad gør jeg?
Avatar billede dennismp Nybegynder
05. oktober 2004 - 16:49 #1
Har du samme problem, selvom du sætter
setlocale(LC_ALL, 'da_DK');

før dit ucwords kald?
Avatar billede sukos Juniormester
05. oktober 2004 - 16:50 #2
Det her virker fint nok hos mig:
<?php
$str = "PÅ PÆLEN PALLE";

echo ucwords(strtolower($str));

?>
Avatar billede mtrolle Nybegynder
05. oktober 2004 - 16:50 #3
Jeg har som standard altid setlocal sat da jeg også bruger stfttime()
Avatar billede sukos Juniormester
05. oktober 2004 - 16:51 #4
Virker det uden setlocale?
Avatar billede mtrolle Nybegynder
05. oktober 2004 - 16:53 #5
setLocale(LC_TIME,"da_DK.ISO_8859-1"); har jeg sat
Avatar billede sukos Juniormester
05. oktober 2004 - 16:55 #6
Virker også her:

<?php
setLocale(LC_TIME,"da_DK.ISO_8859-1");

$str = "PÅ PÆLEN PALLE";

echo ucwords(strtolower($str));

?>
Avatar billede bojo Nybegynder
05. oktober 2004 - 16:56 #7
Lidt klodset, men .....
<?
$txt = "GØG og GOKKE";

$small = array( "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "æ", "ø", "å");
$big  = ARRAY( "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "Æ", "Ø", "Å" );

echo str_replace( $small, $big, substr($txt,0,1 )) . str_replace( $big, $small, substr( $txt, 1));

?>
Avatar billede mtrolle Nybegynder
05. oktober 2004 - 16:56 #8
Det fatter jeg simpelthen ikke!
Avatar billede mtrolle Nybegynder
05. oktober 2004 - 16:59 #9
http://filmnyheder.dk/test.php
Nøjagtigt det som sukos skrev tidligere... Her virker det bare ikke!
>bojo - dit script ændre jo kun først bogstav!
Det skal være først bogstav i hvert ord.
Og det må da kunne gi sig at lave enklere...
Avatar billede bojo Nybegynder
05. oktober 2004 - 16:59 #10
den retter til stort forbogstav og resten småt
Avatar billede bojo Nybegynder
05. oktober 2004 - 16:59 #11
nååååå - på den igen
Avatar billede sukos Juniormester
05. oktober 2004 - 17:02 #12
Prøv

<?php
setLocale(LC_TIME,"da_DK.ISO_8859-1");

$str = "PÅ PÆLEN PALLE";

echo htmlentities(ucwords(strtolower($str)));

?>
Avatar billede bojo Nybegynder
05. oktober 2004 - 17:04 #13
det virker desværre ikke hos alle udbydere, f.eks ikke hos freepaq :-(
Avatar billede sukos Juniormester
05. oktober 2004 - 17:04 #14
eller sætte sprog som et metatag
Avatar billede bojo Nybegynder
05. oktober 2004 - 17:07 #15
virker heller ikke hos freepaq ( på den server min ven er på ) vi har prøvet "alt"
Avatar billede mtrolle Nybegynder
05. oktober 2004 - 17:07 #16
sokus> virker heller ik!
Avatar billede sukos Juniormester
05. oktober 2004 - 17:12 #17
Kan du smide et link til flg.

<?php
$str = "PÅ PÆLEN PALLE";
echo htmlentities(ucwords(strtolower($str)));
?>

Altså uden setlocale?
Ved godt det ikke er brugbart, men for testens skyld
Avatar billede hmortensen Nybegynder
05. oktober 2004 - 17:14 #18
Kan man ikke gøre sådan her:
<?php
$str = "PÅ PÆLEN PALLE";

$small = array( "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "æ", "ø", "å");
$big  = ARRAY( "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "Æ", "Ø", "Å" );

$arr = explode(" ", $str);

foreach ($arr AS $value) {
    echo str_replace( $small, $big, substr($value,0,1 )) . str_replace( $big, $small, substr( $value, 1))." ";
}

?>

Måske en tung løsning, og den laver så et mellemrum til sidst
Avatar billede mtrolle Nybegynder
05. oktober 2004 - 17:17 #19
Avatar billede bojo Nybegynder
05. oktober 2004 - 17:17 #20
den sad jeg lige og tyggede på, men roder med regexp nu - mon jeg kan hitte ud af det :-(
Avatar billede dennismp Nybegynder
05. oktober 2004 - 17:18 #21
virker strtolower ? eller bliver æøå uforandret?
Avatar billede sukos Juniormester
05. oktober 2004 - 17:19 #22
Måske en bug i PHP 5.0.1??
Avatar billede hmortensen Nybegynder
05. oktober 2004 - 17:20 #23
Jeg bruger version 4.3.1, og der har jeg samme problem
Avatar billede bojo Nybegynder
05. oktober 2004 - 17:20 #24
ikke en egentlig bug, fejlen er at vi er danskere ;-)
Avatar billede hmortensen Nybegynder
05. oktober 2004 - 17:22 #25
Mon ikke det kræver at man har compilet vores 'locale' med ?
Avatar billede bojo Nybegynder
05. oktober 2004 - 17:27 #26
jeg ved det ikke, men faktisk ret dårligt at en dansk udbyder ikke understøtter dansk
Avatar billede hmortensen Nybegynder
05. oktober 2004 - 17:27 #27
Øhhh, den er røget over i LC_TIME.

Prøv:
setlocale (LC_ALL, 'da_DK.ISO8859-1');

virker for mig :)
Avatar billede dennismp Nybegynder
05. oktober 2004 - 17:29 #28
Fejlen er sandsynligvis et configurationsproblem. Det virker jo for andre.

Manuel måde:
<?php   
$text = 'ABC abc ÆØÅ æøå';

print myucwords($text);

function myucwords($text) {
    $special = array('æ'=>'Æ','ø'=>'Ø','å'=>'Å');
    $specialf = array_flip($special);
    $text = strtolower(strtr($text, $specialf));

    $wl = explode(' ',$text);
    foreach($wl as $k => $w) {
        if( in_array($w{0}, $specialf) )
            $wl[$k] = $special[$w{0}] . (strlen($w) == 1 ? '' : substr($w,1));
        else
            $wl[$k] = ucfirst($w);
    }

    return join(' ',$wl);
}
Avatar billede mtrolle Nybegynder
05. oktober 2004 - 17:29 #29
http://filmnyheder.dk/test.php
Det er strtolower der laver fejlen
Avatar billede mtrolle Nybegynder
05. oktober 2004 - 17:31 #30
>hindu_skp
Du er den heldige vinder :)
Det hjalp rigtig meget at skrive setlocale (LC_ALL, 'da_DK.ISO8859-1');
smid et svar!
Avatar billede bojo Nybegynder
05. oktober 2004 - 17:32 #31
fedt, for jeg ka sq ikke hitte ud af det :-(
Avatar billede hmortensen Nybegynder
05. oktober 2004 - 17:32 #32
Gi dem til de andre. De knoklede lidt mere for en løsning.

Jeg læste kun hvad de havde skrevet, og så at du skrev TIME istedet for ALL
Avatar billede mtrolle Nybegynder
05. oktober 2004 - 17:33 #33
http://filmnyheder.dk/film/15248 -> en titel hvor man kan se rettelserne virker :)
Avatar billede sukos Juniormester
05. oktober 2004 - 17:33 #34
:O)
Ikke point til mig!
Avatar billede mtrolle Nybegynder
05. oktober 2004 - 17:34 #35
Okay: dem der gerne vil have nogle point må jo endelig smide nogle svar så :)
Avatar billede dennismp Nybegynder
05. oktober 2004 - 17:35 #36
.. jeg siger ikke noget om det første forslag der kom :-)
Avatar billede sukos Juniormester
05. oktober 2004 - 17:35 #37
Der er kun hindu_skp!
Det bar jo løsningen!!! :O)
Avatar billede hmortensen Nybegynder
05. oktober 2004 - 17:35 #38
Hvis I læser i manualen, i bruger kommentar, står der også at den er meget forskellig afhængig af OS type
Avatar billede sukos Juniormester
05. oktober 2004 - 17:36 #39
Ahh, ja så! :O))))))))
Avatar billede hmortensen Nybegynder
05. oktober 2004 - 17:37 #40
IHH, det var jer der brugte flest kræfter...
Avatar billede mtrolle Nybegynder
05. oktober 2004 - 17:38 #41
>dennismp
Så smid et svar - du havde jo ret - jeg havde overset jeg kun havde skriver time :)
Vær nu lidt point-griske :) der er jo ingen der tør smide et svar nu ;)
Avatar billede mtrolle Nybegynder
05. oktober 2004 - 17:39 #42
Kom så dennismp, skal du ikke også have lidt??? :)
Avatar billede dennismp Nybegynder
05. oktober 2004 - 17:45 #43
ok da..

:-)
Avatar billede mtrolle Nybegynder
05. oktober 2004 - 17:46 #44
Tak for hjælpen alle sammen :)
Avatar billede bojo Nybegynder
06. oktober 2004 - 14:46 #45
ved den er lukket, men kunne ikke dy mig for at lege (øve mig i regexp), så her er en one-liner til det :-)

<?PHP
  $txt = "denne sætning har små bogstaver. det må vi fikse. øhhh, vi skal også lige teste æøå, á og é.";
  echo preg_replace_callback("/(^|[\s])([\w])/", create_function('$matches', 'return $matches[1] . chr(ord($matches[2]) -32);' ), $txt);
?>
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