Avatar billede supermand69 Nybegynder
30. december 2004 - 14:28 Der er 7 kommentarer og
1 løsning

reg exp - en wordwrap funktion

Jeg skal have lavet en wordwrap funktion som f.eks. breaker ord som er på over 75 tegn. Jeg ved godt at der i forvejen findes en funktion i PHP, men det er ikke nok. For funktionen skal "overse" eller ikke tælle tegn med som er i tags

Nogen som kan hjælpe? :)
Avatar billede detox Nybegynder
30. december 2004 - 15:15 #1
Avatar billede supermand69 Nybegynder
30. december 2004 - 16:53 #2
jeg har set lidt på den og den er ret indviklet :) jeg vil gerne have lavet den så simpel som muligt, så den kun lige gør det aller mest nødvendige, og så jeg selv kan se hvad der sker :)
Avatar billede detox Nybegynder
30. december 2004 - 17:15 #3
Måske denne kan gøre det:

function wordwrap2($str, $cols, $cut)
{
  $len = strlen($str);
  $tag = 0;
  $result = '';
  $wordlen = 0;
  for ($i = 0; $i < $len; $i++) {
      $chr = $str[$i];
      if ($chr == '<') {
          $tag++;
      } elseif ($chr == '>') {
          $tag--;
      } elseif ((!$tag) && (ctype_space($chr))) {
          $wordlen = 0;
      } elseif (!$tag) {
          $wordlen++;
      }
      if ((!$tag) && ($wordlen) && (!($wordlen % $cols))) {
          $chr .= $cut;
      }
      $result .= $chr;
  }
  return $result;
}
Avatar billede supermand69 Nybegynder
30. december 2004 - 19:22 #4
hvordan kan jeg via reg exp. komme ind til selve linket i denne string?

a href='http://www.kas.dk' target='_blank'

hvis selve url'en er over eks. 60 tegn skal der smides en title='' ind i taget med den fulde url, og efterfølgende skal url'en uden for taget forkortes ned så det også kun fylder 60 tegn
Avatar billede supermand69 Nybegynder
30. december 2004 - 21:06 #5
nå, nu har jeg fået det som jeg vil have det... :) lav et svar

function sql2txt($str, $width, $url = 0, $smiley = 0)
{
    $trans_arr = array(
        '<' => '&lt;',
        '>' => '&gt;'
    );
   
    $str = nl2br(strtr($str, $trans_arr));
   
    if($url) $str = url2link($str);
    if($smiley) $str = txt2smiley($str);
   
    $content = preg_split("/([<>])/", $str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
   
    foreach($content as $value)
    {
        if($value == '<') $intag = 1;
        elseif($value == '>') $intag = 0;
        elseif(substr($value, 0, 2) == 'a ') $href = 1;
        elseif($value == '/a') $href = 0;
       
        if($value != '<' && $value != '>')
        {
            if($href && !$intag)
            {
                if(strlen($value) > $width) $value = substr($value, 0, ($width - 5)).'[...]';
            }
            else $value = wordwrap($value, $width, ' ', $width);
        }
       
        $new_str .= $value;
    }
   
    return $new_str;
}
Avatar billede supermand69 Nybegynder
30. december 2004 - 21:10 #6
eller det er ikke helt rigtigt :)

kan du sige mig hvordan wordwrap() ser ud hvis man skal lave den som reg exp? :)
Avatar billede supermand69 Nybegynder
09. januar 2005 - 13:11 #7
detox > lav et svar :)
Avatar billede detox Nybegynder
10. januar 2005 - 21:58 #8
Svar :O)
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