Avatar billede soduno Novice
23. februar 2011 - 14:22 Der er 9 kommentarer og
1 løsning

String Length php

Jeg er ved at lave noget simpelt nyhedsscript, men er nået dertil hvor jeg skal have kortet
en strenglængde af.

Problemet er at hvis jeg sætter substr til at forkorte 4 tegn ned, og vi antager at jeg har en nyhed
der kun indeholder 4 tegn, så vil den jo ikke udskrive noget da den har forkortet alle tegne ned. Findes der en funktion alla max string length?

Vh
Simon
Avatar billede Slettet bruger
23. februar 2011 - 15:10 #1
substr() kan også bruges til at sætte en maks længde for den påægldne streng.

Kode eksempel*:
<?php
function str_maxlen($string, $length) {
  return substr($string, 0, $length);
}

$string = "Hejsa du!";
$max_length = 5;
$new_string = str_maxlen($string, $max_length);

echo $new_string; // Output: "Hejsa"
?>

* OBS: Koden er ikke testet, men skulle gerne give dig en idé om hvordan det kan laves.
Avatar billede olsensweb.dk Ekspert
23. februar 2011 - 15:30 #2
en anden ide

<?php
function MaxStringLength($str, $max){
    $lng = strlen($str);   
    if($lng>$max){
        $skip = $max-$lng; // ønsker et negativt tal, da substr skal bruge et negativt tal for at forkorte i slutningen af stringen
        $str = substr($str, 0, $skip);
    }
    return $str;   
}
$max = 5;
$str1 = "her er en lille test";
echo MaxStringLength($str1, $max);
?>
Avatar billede soduno Novice
23. februar 2011 - 15:52 #3
Hmm nu ved jeg godt jeg ikke forklarede følgende, men mit næste problem er at den jo selvfølgelig skærer <p> <a href tegn af hvis de er udenfor det max antal givende ord. Kan man overhovedet undgå det på en nem måde?
Avatar billede mcb2001 Nybegynder
23. februar 2011 - 16:32 #4
ja, der skal du istedet for kigge på regular expressions, og så bruge en sådan til at klippe korrekt i din string.
Avatar billede Slettet bruger
24. februar 2011 - 04:38 #5
Hvis du vil undgå at fjerne dele af tags, så ville det nemmeste nok være, som @mcb2001 siger, at kigge på regulære udtryk (regex).

Et simpelt eksempel på en regex, der sætter maks længde på indhold mellem >- og <-tegn:
<?php
function str_maxlen($string, $length) {
  $pattern = "/(>)(.+)(<)/e";
  $replace = "'\\1'.substr('\\2',0,$length).'\\3'";
  return preg_replace($pattern, $replace, $string);
}

$string = "<b>Hejsa Du!</b>";
$length = 5;

$test1 = str_maxlen($string, $length);
print $test1; // Output: <b>Hejsa</b>
?>

Det skal dog siges at ovenstående eksempel ikke er særlig fleksibelt, men det kan forhåbentligt give dig en idé om hvordan problemet kan kringles.
Avatar billede olsensweb.dk Ekspert
24. februar 2011 - 13:40 #6
fandt dette http://code.google.com/p/cut-html-string/
<?php
include ("cutstring.php");
$wanted_count = 10;
$data = "min <a href = 'http://olsensweb.dk'> homepage </a> er en lille test";
// $data = "her <b>er</b> en lille test";
$new_string = cut_html_string($data,$wanted_count);
echo $new_string;
?>

output min homep
Avatar billede Slettet bruger
24. februar 2011 - 13:53 #7
En lidt mere avanceret, men dog smart løsning :-)
Og så behøver man heller ikke selv lave noget!
Avatar billede soduno Novice
25. februar 2011 - 14:40 #8
Roxi -> - Tak for det, det var lige hvad jeg havde brug for :)
Og selv tak til jer andre :)
Avatar billede Slettet bruger
25. februar 2011 - 19:03 #9
Du får et svar fra mig her..
Men syntes du skal kigge på det eksempel @ronols kom med i post #6, da det er langt mere fleksibelt.
Avatar billede soduno Novice
11. marts 2011 - 23:43 #10
@ronols læg lige et svar så jeg kan give dig point, og få tråden lukket igen :)
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