---
title: "RegExp: Korta ner länkar"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/163015-regexp-korta-ner-länkar"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Peeer"
published: "2007-07-29T21:15:18.000Z"
updated: "2007-07-30T16:44:12.000Z"
replies: 2
views: 516
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/163015-regexp-korta-ner-länkar"
---

# RegExp: Korta ner länkar

## #1 — Peeer, 2007-07-29T21:15Z

Afton!
Använder följande funktion för att bryta långa ord:

```
<?php
function ShortWord($text,$length) 
{
	$text = preg_replace ("/([^\s]{".$length.",})/e", "''.wordwrap('\\1', ".$length.", ' ', 1).''", $text);
	return $text;
}?>
```

Den fungerar prima, men nu vill jag modifiera lite. Om strängen jag skickar in består av en länk så kapas den mitt i om den är för lång, det är dumt! Däremot får gärna det som är mellan \<a\> och \</a\> brytas.

Dvs

```
//skickar jag in följande i den nuvarande funktionen
echo ShortWord('<a href="http://www.google.se">Goooooogle!</a>',5)
//så får jag ut
<a href= "htt p://w ww.go ogle. se"> Goooo oogle !</a>
//Det resultat jag vill ha ser ut såhär:
<a href="http://www.google.se">Goooo oogle !</a>
```

Hur fixar jag det? 
Om det förenklar så ser länkarna alltid ut precis som mitt exempel ovan. Inga konstiga attribut eller liknande att ta hänsyn till.

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

## #2 — stevenet, 2007-07-30T15:46Z

Hej!

Eftersom ingen annan vågat sig på det hela... Wordwrappar inte url:er, str_replace används för att lura wordwrap-funktionen. Blir inte helt som du tänkt (beroende på att str_replace lägger till två tecken), men tillräckligt nära?

```php
<?php
function ShortWord($text, $length)
{
   $text = str_replace('">', '"> ', $text);
   $text = str_replace('</a>', ' </a>', $text);
    
  $pattern = '/(^|\s)(?!(?:http:\/\/(?:www\.)?|www\.))([\w??????!?.,-]{'. $length .',})(\s|$)/e';
  $text =  preg_replace( $pattern, '"$1".wordwrap( "$2", $length, " ", true )."$3"', $text );
      
  $text = str_replace('"> ', '">', $text);
  $text = str_replace(' </a>', '</a>', $text);
    
  return $text;
}

echo ShortWord('<a href="http://www.google.se">Goooooogle!</a> Texttexttexttexttext. <a href="http://www.aftonbladet.se" target="_blank">Aftonbladet</a>',5);

?>
```

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

## #3 — Peeer, 2007-07-30T16:44Z

Verkar fungera fint! Hittade dock en liten bugg, om det är en br-tagg precis innan ett för långt ord så bryts inte ordet. Löste det genom att lägga till ett blanksteg precis efter alla sådana taggar

```
echo ShortWord('<br />12345678901234567890 <a href="http://www.google.se">Goooooogle!</a> Texttexttexttexttext. <a href="http://www.aftonbladet.se" target="_blank">Aftonbladet</a>',5);
```

Tack för hjälpen!

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

---

Tråden på webben: https://www.webforum.nu/amne/php/163015-regexp-korta-ner-länkar
