Jeg vil nu mene at det er et ret stort krav som du stiller! Det kræver jo at scriptet analyserer overskriften og skiller udsagnsord og navneord fra biord osv.
Den kan kun lade sig gøre ved at gemme ALLE mulige ord at forskellige klasser i en database og søge på dem. Det kan man da ikke sådan lige gøre...
Det er straks noget lettere hvis scriptet bare skal lave det første bogstave i alle ordene i titlen store og alle de andre små...
Det er helt korrekt at det ikke er verdens nemmeste opgave. Jeg giver som sagt points til bedste løsning. Bedste løsning er den som returnerer flest korrekte svar på en tilfældig mængde titler. Så kravet er at din løsning skal være den bedste...
Den kræver som sagt at man er meget fortrolig med engelsk grammatik. Jeg er ret sikker på at man ikke behøver at søge en database igennem for at adskille ofte-ubetydelige ord fra de ofte-betydelige.
Det er rigtigt. Der er mange ord på engelsk, men jeg vil sige at ca. 98% af dem skal være med stort i titler.
Det er ikke så svært at se hvilke der skal laves til stort; noget helt andet er scriptet selv, som driller mig lidt nu, men jeg er godt i gang. Så snart det er lavet, kan man jo bare begynde at poste ord ind i det selv.
Nedenunder mit bud. half_ds kode har flere problemer.
a. Sidste ord skal altid med stort. b. Forkortelser, som allerede er med CAPS, skal bibeholdes i CAPS. Eg. SPECTRA. c. Specielle navne/ord som iTouch og e-mail skal med lille forbogstav. Hvis du har behov for support af sådanne cases, er jeg villig til at udvide. d. Verber skal altid med stort, da de er betydelige. d. Ord som with, from og if er problematiske. De kan både være betydelige og ubetydelige (store/små). Jeg har valgt at bruge with, from og If. Hvorvidt det er korrekt må man bedømme empirisk.
function TitleCase($tmp) { static $lowercase= array (\'a\', \'an\', \'and\', \'as\', \'at\', \'by\', \'for\', \'from\', \'in\', \'into\', \'of\', \'on\', \'or\', \'the\', \'to\', \'vs.\', \'with\'); $tmp= explode(\" \", $tmp); $sz= sizeof($tmp); $i= -1; while (++$i < $sz) { $uc= !in_array(strtolower($tmp[$i]), $lowercase); if ($i==0 || $i+1==$sz) // first or last word $uc= true; if ($uc) $tmp[$i][0]= strtoupper($tmp[$i][0]); else $tmp[$i][0]= strtolower($tmp[$i][0]); } return implode(\" \", $tmp); }
pointer: Udmærket løsning og perfekt til mit formål (korrekt visning af titler på mp3 filer). Det lader til at du har tænkt over problemet (eller selv haft problemstillingen før).
Synes godt om
Ny brugerNybegynder
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.