---
title: "Göra länkar av ren html-text?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/189882-göra-länkar-av-ren-html-text"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Danne V"
published: "2012-06-12T06:14:51.000Z"
updated: "2012-06-12T09:26:21.000Z"
replies: 8
views: 1018
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/189882-göra-länkar-av-ren-html-text"
---

# Göra länkar av ren html-text?

## #1 — Danne V, 2012-06-12T06:14Z

Jag använder ett enkelt scrape-skript för att hämta nyheter från en viss sida.
Tyvärr saknas länkar tillbaka till den sidan.

Dom använder en särskild span-class (.rubriker) för alla rubriker. Hur lägger man anchor-taggar runt den?

Så här ser scrape-skriptet ut:

```php
require("taggrab.class.php"); 
$urlrun="http://nyhetskällan...";
$stag="<p><span class=";
$etag="</p>";
$tspider = new tagSpider();
$tspider->fetchPage($urlrun);
$linkarray = $tspider->parse_array($stag, $etag); 
echo "<h2>Nyheter ".$urlrun."</h2><br />";
foreach ($linkarray as $result) {
echo $result;
echo "<hr />";
}
```

..och källkoden i sidan med nyheterna är byggd så här:

```
<p><span class="rubriker">Här är rubriken</span><br />Här är artikelns brödtext</p>
```

...och så här skulle jag vilja att den blev:

```
<p><span class="rubriker"><a href="http://nyhetskällan...">Här är rubriken</a></span><br />Här är artikelns brödtext</p>
```

Alltså: Det ska vara en och samma "statiska" sökväg till alla artiklar. Och det spelar ju ingen roll om span-klassen omsluter länken eller tvärtom....

Någon?

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

## #2 — Danne V, 2012-06-12T06:21Z

Förresten, om det är relativt enkelt att lägga in en funktion som trunkerar (klipper av) outputen så att varje artikel inte återges i sin helhet utan bara t.ex. 200 tecken vore det inte dumt..... :)

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

## #3 — metalboy, 2012-06-12T06:29Z

Använd ett reguljärt uttryck (regular expression) för att få in länken. Nu vet jag inte hur tagSpider fungerar, men gissar att du kan prova med något liknande detta:

```php
echo preg_replace('#<span class="rubriker">(.*?)</span>#i', '<span class="rubriker"><a href="http://nyhetskällan...">$1</a></span>', $result);
```

Är det artikelns brödtext du vill klippa efter exempelvis 200 tecken, eller är det rubrik + brödtext som ska vara max 200 tecken?

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

## #4 — Danne V, 2012-06-12T06:50Z

> **[metalboy skrev:](https://www.webforum.nu/p/1551442)**
>
> Använd ett reguljärt uttryck (regular expression) för att få in länken. Nu vet jag inte hur tagSpider fungerar, men gissar att du kan prova med något liknande detta:
> 
>
>
> ```php
> echo preg_replace('#<span class="rubriker">(.*?)</span>#i', '<span class="rubriker"><a href="http://nyhetskällan...">$1</a></span>', $result);
> ```

Najs! Ska omedelbart testa!

> **[metalboy skrev:](https://www.webforum.nu/p/1551442)**
>
> Är det artikelns brödtext du vill klippa efter exempelvis 200 tecken, eller är det rubrik + brödtext som ska vara max 200 tecken?

Det är väl enklast att bara kapa alltsammans efter X antal tecken...? Så får jag testa hur många som får det att se mest vettigt ut...

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

## #5 — Danne V, 2012-06-12T06:56Z

> **[metalboy skrev:](https://www.webforum.nu/p/1551442)**
>
> ```php
> echo preg_replace('#<span class="rubriker">(.*?)</span>#i', '<span class="rubriker"><a href="http://nyhetskällan...">$1</a></span>', $result);
> ```

Funkade galant!
Tackar! 
(helvete, jag blir grymt avundsjuk på folk som kan sånt där....)  :P

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

## #6 — metalboy, 2012-06-12T07:48Z

> **[Danne V skrev:](https://www.webforum.nu/p/1551445)**
>
> Det är väl enklast att bara kapa alltsammans efter X antal tecken...? Så får jag testa hur många som får det att se mest vettigt ut...

Problemet med att kapa rakt av är att då räknas ju även HTML-tecknen som tecken... Dvs, du kan råka kapa mitt i \</span\> t.ex.

Om du begränsar längden på brödtexten - och den inte innehåller några HTML-taggar - så blir funktionen väldigt enkel. Det räcker då att använda [substr](http://www.php.net/substr/)().

Annars blir det lite krångligare, för att se till så man inte kapar någon HTML-tag.

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

## #7 — Danne V, 2012-06-12T08:06Z

> **[metalboy skrev:](https://www.webforum.nu/p/1551452)**
>
> Problemet med att kapa rakt av är att då räknas ju även HTML-tecknen som tecken... Dvs, du kan råka kapa mitt i \</span\> t.ex.
> 
> Om du begränsar längden på brödtexten - och den inte innehåller några HTML-taggar - så blir funktionen väldigt enkel. Det räcker då att använda [substr](http://www.php.net/substr/)().
> 
> Annars blir det lite krångligare, för att se till så man inte kapar någon HTML-tag.

Oj. Jag vill ju inte klippa mitt i en tagg...
Jag har kikat på substr men fattar nada, eller i alla fall inte var jag i så fall skulle lägga in den funktionen. Så om du har en minut över...? (host, host)  :r

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

## #8 — metalboy, 2012-06-12T08:17Z

Exempel med utökat reguljärt uttryck där brödtexten klipps efter 200 tecken:

```php
function content_limit($content, $limit=200) {
    if (strlen($content) > $limit)
        return substr($content, 0, $limit) . '...';
    return $content;
}

require("taggrab.class.php"); 
$urlrun="http://nyhetskällan...";
$stag="<p><span class=";
$etag="</p>";
$tspider = new tagSpider();
$tspider->fetchPage($urlrun);
$linkarray = $tspider->parse_array($stag, $etag); 
echo "<h2>Nyheter ".$urlrun."</h2><br />";
foreach ($linkarray as $result) {
    echo preg_replace('#<p><span class="rubriker">(.*?)</span><br />(.*?)</p>#ie', '"<p><span class=\"rubriker\"><a href=\"http://nyhetskällan...\">$1</a></span><br />" . content_limit("$2") . "</p>"', $result);
    echo "<hr />";
}
```

Lägg märke till att jag har lagt till flaggan **e** (eval) till det reguljära uttrycket. Det gör att jag kan använda funktionsanrop i replace-argumentet.

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

## #9 — Danne V, 2012-06-12T09:26Z

> **[metalboy skrev:](https://www.webforum.nu/p/1551455)**
>
> Exempel med utökat reguljärt uttryck där brödtexten klipps efter 200 tecken:
> 
> Lägg märke till att jag har lagt till flaggan **e** (eval) till det reguljära uttrycket. Det gör att jag kan använda funktionsanrop i replace-argumentet.

Suveränt!
Fungerar perfekt!
Tusen tack för hjälpen!!!!  :bire

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

---

Tråden på webben: https://www.webforum.nu/amne/php/189882-göra-länkar-av-ren-html-text
