---
title: "Blanksteg efter 20 tecken, hur?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/107534-blanksteg-efter-20-tecken-hur"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "kbking"
published: "2004-07-17T21:22:09.000Z"
updated: "2004-07-18T18:28:32.000Z"
replies: 10
views: 394
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/107534-blanksteg-efter-20-tecken-hur"
---

# Blanksteg efter 20 tecken, hur?

## #1 — kbking, 2004-07-17T21:22Z

Hej!

Jag har denna kod, som funkar klanderfritt.

```php
<?
// Original hack by Rene displays last 5 postings in forum 1.
//This hack will show the last 3 posted headlines in each forum sectioned by folders if any
chdir("../phorum/"); //again, don't forget to change this to suit your phorum dir.
include "common.php";
$curr_par = "";
$par = "";
$number=3; // number of messages to show.

//omit or change the forum name for your test forums.
// we select active forums tables that are not folders
$sSQL="Select id, name, table_name, parent from ".$pho_main." where active=1 and folder='0' and name!='Test' order by parent";
$q->query($DB, $sSQL);
$rec=$q->getrow();
if(is_array($rec)){
  while(is_array($rec)){
    //get folder name
    if ($rec[parent]>0) {
      $pSQL="Select name from ".$pho_main." where id=$rec[parent]";
      $pq = new query($DB, $pSQL);
      $prec=$pq->getrow();
      $par = $prec[name];
    }
    $SQL="select id, thread, author, subject, datestamp from $rec[table_name] order by datestamp desc limit $number";
    $nq = new query($DB, $SQL);
    $nrec=$nq->getrow();
    if(is_array($nrec)) {
      if ($curr_par != $par) echo "<br><b>$par</b>";
      $curr_par = $par;
      echo "<br><b><i>$rec[name]</i></b><br>\n";
      while(is_array($nrec)){
        echo "$nrec[author] - <a href=\"$forum_url/$read_page.$ext?f=$rec[id]&i=$nrec[id]&t=$nrec[thread]\"> $nrec[subject]</a><br>\n";
        $nrec=$nq->getrow();
      }
    }
  $rec=$q->getrow();
  }
}
?>
```

Nu vill jag att antal tecken i ämnesraden ska kunna vara max 20 st. 

Spango har postat en kodsnutt, som kanske kan vara till hjälp här. Den ser ut så här:

```php
$txt = 'en massa långa ord';
$ptn = '/(\S{20})/'; # matcha och memorera 20 efterföljande icke-blanksteg
echo preg_replace($ptn, '\1 ', $txt);
```

Alltså hur kan jag få till ett blanksteg efter säg 20 tecken?

Blev lite fel där. :r Menar snarare så här: hejahejahejahejahejahejahejaheja skall istället synas så här: hejahejahejahejaheja...

Tack på förhand!

Permalänk: https://www.webforum.nu/p/107534

## #2 — Matte, 2004-07-17T22:19Z

Något liknande detta du söker?

```php
$txt = strlen($txt) > 20 ? substr($txt, 0, 20).'...' : $txt;
```

Permalänk: https://www.webforum.nu/p/1387792

## #3 — kbking, 2004-07-18T09:30Z

Jo det borde vara det.

Jag har suttit och ändrat lite och koden ser nu ut så här:

```php
<?
// Original hack by Rene displays last 5 postings in forum 1.
//This hack will show the last 3 posted headlines in each forum sectioned by folders if any
chdir("../phorum/"); //again, don't forget to change this to suit your phorum dir.
include "common.php";
$curr_par = "";
$par = "";
$number=3; // number of messages to show.

//omit or change the forum name for your test forums.
// we select active forums tables that are not folders
$sSQL="Select id, name, table_name, parent from ".$pho_main." where active=1 and folder='0' and name!='Test' order by parent";
$q->query($DB, $sSQL);
$rec=$q->getrow();
if(is_array($rec)){
  while(is_array($rec)){
    //get folder name
    if ($rec[parent]>0) {
      $pSQL="Select name from ".$pho_main." where id=$rec[parent]";
      $pq = new query($DB, $pSQL);
      $prec=$pq->getrow();
      $par = $prec[name];
    }
    $SQL="select id, thread, author, subject, datestamp from $rec[table_name] order by datestamp desc limit $number";
    $nq = new query($DB, $SQL);
    $nrec=$nq->getrow();
    if(is_array($nrec)) {
      if ($curr_par != $par) echo "<br><b>$par</b>";
      $curr_par = $par;
      echo "<br><b><i>$rec[name]</i></b><br>\n";
      while(is_array($nrec)){
       $subject = explode (" ", $nrec[subject]);
       $i = 0;
      while($subject[$i]) {
       if(strlen($subject[$i]) >= 20){ $subject[$i] = substr ($subject[$i], 0, 20)."..."; }
       $i++;
      }
      $subject = implode (" ", $subject);
        echo "$nrec[author] - <a href=\"$forum_url/$read_page.$ext?f=$rec[id]&i=$nrec[id]&t=$nrec[thread]\"> $nrec[subject]</a><br>\n";
        $nrec=$nq->getrow();
      }
    }
  $rec=$q->getrow();
  }
}
?>
```

Jag får inga felmeddelanden, men resultatet  blir detsamma, som med översta exemplet, nämligen så att allt skrivs ut korrekt,
fast utan att ämnesraden begränsas till 20 tecken.

Permalänk: https://www.webforum.nu/p/1387870

## #4 — Matte, 2004-07-18T11:15Z

Nu förstår jag inte vad du försöker göra.

Du tar de enskilda orden i ämnesraden och kortar ner dom till max 20 tecken. 
Sedan skriver du ut strängen som den var från början.

Antingen vill du hugga ner hela strängen till 20 tecken:

```php
$url = "$forum_url/$read_page.$ext?f=$rec[id]&i=$nrec[id]&t=$nrec[thread]";
if (strlen($nrec['subject']) > 20) {
   $subject = substr($nrec['subject'], 0, 20).'...';
} else {
   $subject = $nrec['subject'];
}
echo "$nrec[author] - <a href=\"$url\"> $subject</a><br>\n";
```

 
eller så vill du hindra att där finns ord som är längre än 20 tecken, då kan du göra så här:

```php
$url = "$forum_url/$read_page.$ext?f=$rec[id]&i=$nrec[id]&t=$nrec[thread]";
$subject = wordwrap($nrec['subject'], 20, "\n", 1);
echo "$nrec[author] - <a href=\"$url\"> $subject</a><br>\n";
```

Permalänk: https://www.webforum.nu/p/1387915

## #5 — kbking, 2004-07-18T17:06Z

Tack!

Hur/var lägger jag in ditt första förslag? Själv får jag ett felmeddelande.

Permalänk: https://www.webforum.nu/p/1390981

## #6 — Matte, 2004-07-18T17:15Z

Istället för:

```php
      while(is_array($nrec)){
       $subject = explode (" ", $nrec[subject]);
       $i = 0;
      while($subject[$i]) {
       if(strlen($subject[$i]) >= 20){ $subject[$i] = substr ($subject[$i], 0, 20)."..."; }
       $i++;
      }
      $subject = implode (" ", $subject);
        echo "$nrec[author] - <a href=\"$forum_url/$read_page.$ext?f=$rec[id]&i=$nrec[id]&t=$nrec[thread]\"> $nrec[subject]</a><br>\n";
```

Det saknades några apostrofer i koden jag skrev i inlägget innan. Har fixar detta.

Permalänk: https://www.webforum.nu/p/1390985

## #7 — kbking, 2004-07-18T18:05Z

Nu får jag felet att en } på rad 45 är "oväntad". Tar jag bort denna }, kommer de tre punkterna (...) fram sist i ämnesraden, men dessutom upprepas ämnesraden massor av ggr.

Permalänk: https://www.webforum.nu/p/1391001

## #8 — kbking, 2004-07-18T18:10Z

Tog nu bort denna kodsnutt och det verkar fungera.

 $nrec=$nq-\>getrow();
      }

Kan det vara rätt så, Matte?

Permalänk: https://www.webforum.nu/p/1391002

## #9 — kobranturre, 2004-07-18T18:10Z

om du tittar på koden så ser du 3 st { och 2 }

Jepp, det fattas 1 }

Permalänk: https://www.webforum.nu/p/1391003

## #10 — Matte, 2004-07-18T18:14Z

Eller är det kanske lämpligare att denna kod finns kvar:

```php
while(is_array($nrec)){
```

 
Den halkade med av misstag i mitt tidigare inlägg :)

*Skärp dig nu Matte!*

Permalänk: https://www.webforum.nu/p/1391004

## #11 — kbking, 2004-07-18T18:28Z

Ja det är lämpligare!

Tack för hjälpen! :)

Permalänk: https://www.webforum.nu/p/1391010

---

Tråden på webben: https://www.webforum.nu/amne/php/107534-blanksteg-efter-20-tecken-hur
