---
title: "modifikation av \"länka länkar i sträng\"-funktion"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/111057-modifikation-av-länka-länkar-i-sträng-funktion"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Peeer"
published: "2004-09-07T20:08:10.000Z"
updated: "2004-09-13T20:34:58.000Z"
replies: 7
views: 509
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/111057-modifikation-av-länka-länkar-i-sträng-funktion"
---

# modifikation av "länka länkar i sträng"-funktion

## #1 — Peeer, 2004-09-07T20:08Z

```
function strLinks($text) {
	
	$text = preg_replace('%(<a\s[^>]+>[url]http://[/url][^\s]+</a>)|(<[^>]+[url]http://[/url][^>]+>)|([url]http://[/url])[^\s]+%ie',
		'"$0"=="$1" || "$0"=="$2" ? "$0" : "<a href=\"$0\" rel=\"external\" >$0</a>"', $text);
	$text = preg_replace("/\s([w.-_]+)(@)([w.-_]+)(\.)([w.-_]+)/i", "<a href=\"mailto:$0\">$0</a>",$text);
	$text = preg_replace('%(<a\s[^>]+>[url]http://[/url]|[url]www.[/url][^\s]+</a>)|(<[^>]+[url]www.[/url][^>]+>)|([url]www.[/url])[^\s]+%ie',
                  '"$0"=="$1" || "$0"=="$2" ? "$0" : "<a href=\"http://$0\" rel=\"external\">$0</a>"', $text);	
	return $text;
}
```

Ovanstående funktion fungerar utmärkt. Den ersätter adresser i strängar med länkar. Nu skulle jag vilja modifiera funktionen så att den fungerar som här på wF. Dvs om länken är längre än X tecken så kortas länken ner. Har gjort diverse försök, men lyckas inte!

ex: <http://idg.se/ArticlePages/200409/07/20040907144329_NOK/20040907144329_NOK.dbp.asp>

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

## #2 — Pedda, 2004-09-07T20:24Z

Tror att man ska använda funktionen substr().
Men är tyvärr osäker på hur.  :l

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

## #3 — Peeer, 2004-09-12T19:25Z

Bump!

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

## #4 — kjell, 2004-09-13T06:04Z

```php
$url = 'http://www.webforum.nu/showthread.php?threadid=108631&forumid=23';
if (strlen($url) > 55) {
	$short_url = substr($url, 0, 35) . '...' . substr($url, -15);
	print ("<a href=\"" .$url . "\">" . $short_url . "</a>");
} else {
	print ("<a href=\"" .$url . "\">" . $url . "</a>");
}
```

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

## #5 — Peeer, 2004-09-13T18:18Z

Tack, men nej tack ;)

En funktion för att korta ner urlen ska jag nog klara av, det jag främst behöver hjälp med är att få in anropet till funktionen från min funktion.

```
function strLinks($text) {
	
	$text = preg_replace('%(<a\s[^>]+>[url]http://[/url][^\s]+</a>)|(<[^>]+[url]http://[/url][^>]+>)|([url]http://[/url])[^\s]+%ie',
		'"$0"=="$1" || "$0"=="$2" ? "$0" : "<a href=\"$0\" rel=\"external\" >[b]min_funktion($0)[/b]</a>"', $text);
	$text = preg_replace("/\s([w.-_]+)(@)([w.-_]+)(\.)([w.-_]+)/i", "<a href=\"mailto:$0\">$0</a>",$text);
	$text = preg_replace('%(<a\s[^>]+>[url]http://[/url]|[url]www.[/url][^\s]+</a>)|(<[^>]+[url]www.[/url][^>]+>)|([url]www.[/url])[^\s]+%ie',
                  '"$0"=="$1" || "$0"=="$2" ? "$0" : "<a href=\"http://$0\" rel=\"external\">[b]min_funktion($0)[/b]</a>"', $text);	
	return $text;
}
```

Jag vet att det ska gå att göra något liknande, men  det vill sig inte riktigt. Istället för att anropa min_funktion() så skriver den helt enkelt ut texten min_funktion(). :/

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

## #6 — sebbz, 2004-09-13T20:23Z

Sätt ' . min_funktion($0); . '

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

## #7 — Peeer, 2004-09-13T20:29Z

Gick inte det heller tyvärr. Jag har dock kommit lite närmare en lösning nu

```
function strLinks($text) {
	
	$text = preg_replace('%(<a\s[^>]+>[url]http://[/url][^\s]+</a> )|(<[^>]+[url]http://[/url][^>]+> )|([url]http://[/url])[^\s]+%ie',
		'"$0"=="$1" || "$0"=="$2" ? "$0" : "<a href=\"$0\" rel=\"external\" >$0</a>"', $text);
	$text = preg_replace("/\s([w.-_]+)(@)([w.-_]+)(\.)([w.-_]+)/i", "<a href=\"mailto:$0\">$0</a>",$text);
	$text = preg_replace('%(<a\s[^>]+>[url]http://[/url]|[url]www.[/url][^\s]+</a> )|(<[^>]+[url]www.[/url][^>]+> )|([url]www.[/url])[^\s]+%ie',
                  '"$0"=="$1" || "$0"=="$2" ? "$0" : "<a href=\"http://$0\" rel=\"external\">[b]".min_funktion($0)."[/b]</a>"', $text);	
	return $text;
}
function min_funktion($data){
	if(strlen($data) > 35)
		return substr($data,0,25) . '...' . substr($data,-10);
	else
		return $data;
}

echo strLinks('foo [url]www.verylongdomainname.se[/url] bar');
```

Resulterar i

```
foo <a href="http://www.verylongdomainname.se" rel="external">wwwverylongdomainnamese</a> bar
```

 dvs, någon snor alla punkter i adressen! Vart sjutton försvinner dem?  :q

/r Hmm, min debugger skriver ut små kryptiska felmeddelanden.

> Debug session started.
> Notice: PHPDocument1(8) : regexp code line 1 - Use of undefined constant www - assumed 'www'
> Notice: PHPDocument1(8) : regexp code line 1 - Use of undefined constant verylongdomainname - assumed 'verylongdomainname'
> Notice: PHPDocument1(8) : regexp code line 1 - Use of undefined constant se - assumed 'se'
> Debug session ended.

 Tolka någon?

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

## #8 — sebbz, 2004-09-13T20:34Z

Matchar inte den sista preg_replace utdata från min_funktion då? Blir helt blind av regexpen.

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

---

Tråden på webben: https://www.webforum.nu/amne/php/111057-modifikation-av-länka-länkar-i-sträng-funktion
