---
title: "Förkorta url"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/132135-förkorta-url"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "WiZzLeR"
published: "2005-08-01T19:25:43.000Z"
updated: "2005-08-02T17:27:40.000Z"
replies: 5
views: 604
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/132135-förkorta-url"
---

# Förkorta url

## #1 — WiZzLeR, 2005-08-01T19:25Z

jag använder denna funktion för att göra hyperlänkar automatiskt.

```php
function auto_link($string)
{
	$string = preg_replace("/(?<=^|\s)(www\.([-a-zA-Z0-9_]+\.)*[-a-zA-Z0-9_]+\.[-a-zA-Z0-9_])/", "http://$1", $string);
	$search = "/(?<=^|\s)(http:\/\/|https:\/\/|ftp:\/\/)(([-a-zA-Z0-9_]+\.)*[-a-zA-Z0-9_]+\.[-a-zA-Z0-9_]{2,8}[^\s]*)(?=\s|$)/";
	$replace = "<a href=\"$1$2\">$2</a>"; 
	$string = preg_replace($search, $replace, $string);
	
return $string;
}
```

 

Hur kan jag förkorta urlen som här på webforum: <http://www.bla/.../lasld.com>

har försökt med substr men då förkortas hela strängen. =/

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

## #2 — nicclas, 2005-08-01T21:26Z

Din regular expression för att identifiera en URL är rätt komplicerad. Med en så komplicerad reg. exp. blir det (nästintill?) omöjligt ta reda på hur lång en URL i texten är. Jag har därför skippat kravet att en URL måste innehålla minst en punkt, som du hade tidigare.

Provkör detta:

```
<?php
function auto_link($string)
{

  $string = preg_replace("/(?<=^|\s)(www\.([-a-zA-Z0-9_]+\.)*[-a-zA-Z0-9_]+\.[-a-zA-Z0-9_])/", "http://$1", $string);

  $search = "/(?<=^|\s)(http:\/\/|https:\/\/|ftp:\/\/)(\S{21,})(?=\s|$)/e"; 
  $replace = "'<a href=\"$1$2\">$1'.substr('$2',0,10).'...'.substr('$2',-10).'</a>'"; 
  $string = preg_replace($search, $replace, $string);

  $search = "/(?<=^|\s)(http:\/\/|https:\/\/|ftp:\/\/)(\S{1,20})(?=\s|$)/";
  $replace = "<a href=\"$1$2\">$1$2</a>";
  $string = preg_replace($search, $replace, $string);

  return $string;
}

$text="En lank [url]http://www.frisim.com/[/url] dar du far ersatta frisim med nagot langre for att testa...";
echo auto_link($text);

?>
```

Du får själv testköra för att förvissa dig om att det verkligen fungerar som du vill...

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

## #3 — WiZzLeR, 2005-08-02T02:10Z

Ja det fungerar =)

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

## #4 — nicclas, 2005-08-02T08:56Z

Efter lite funderande kom jag fram till att det är så här det ska göras. Med denna kod får du med ditt "krav" på att endast URL:ar med minst en punkt i kommer igenom. 

Eftersom du med denna kod "slipper" en av preg_replace-anropen kanske den är lite snabbare också...

```
<?php
function shorten($url){
  if(strlen($url)>20)
    return substr($url,0,10)."...".substr($url,-10);
  return $url;
}

function auto_link($string)
{

  $string = preg_replace("/(?<=^|\s)(www\.([-a-zA-Z0-9_]+\.)*[-a-zA-Z0-9_]+\.[-a-zA-Z0-9_])/", "http://$1", $string);

  $search = "/(?<=^|\s)(http:\/\/|https:\/\/|ftp:\/\/)(([-a-zA-Z0-9_]+\.)*[-a-zA-Z0-9_]+\.[-a-zA-Z0-9_]{2,8}[^\s]*)(?=\s|$)/e";
  $replace = "'<a href=\"$1$2\">$1'.shorten('$2').'</a>'"; 
  $string = preg_replace($search, $replace, $string);
  
  return $string;
}

$text="En lank dar lank [url]http://www.fr123123123123123123123123123123isim.com/[/url] frisim ersatts med nagot langre for att testa...";
echo auto_link($text);
?>
```

(Innan jag tittade på denna fråga hade jag ingen aning om att man kunde anropa en "function" direkt inne i en regular expression i PHP. Det gör ju reg. exp:s i PHP ännu flexiblare, och kanske till och med enklare att använda :) )

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

## #5 — WiZzLeR, 2005-08-02T16:10Z

hmm nått är fel. Den hittar inte urler. Troligtvis något fel i $search. Ska kolla.

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

## #6 — nicclas, 2005-08-02T17:27Z

Det verkar konstig om mitt första, men inte andra exempel fungerar eftersom det har samma reg.exp. som i ditt ursprungliga förslag. Det enda som skiljer är /e på slutet, och det bör inte påverka vilka textdelar som hittas.

Båda mina exempel fungerar på alla de varianter av test-strängar jag provat.

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

---

Tråden på webben: https://www.webforum.nu/amne/php/132135-förkorta-url
