---
title: "Hitta i skriptarkivet, fungerar inte 100%...!"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/145504-hitta-i-skriptarkivet-fungerar-inte-100"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "toja"
published: "2006-04-13T11:58:17.000Z"
updated: "2006-04-18T11:56:25.000Z"
replies: 13
views: 800
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/145504-hitta-i-skriptarkivet-fungerar-inte-100"
---

# Hitta i skriptarkivet, fungerar inte 100%...!

## #1 — toja, 2006-04-13T11:58Z

Hittade denna kod i skriptarkivet:

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

Där skrev Mungo:

> Denna funktion hittar allt som börjar med "www." och "http://", eller som är en giltig e-postadress och länkar upp det. Den är dock smart nog att ignorera det som ligger inom HTML-taggar!

Märkte efter tester dock att den inte är 100% felfri.
Det skiter sig vid detta:
$text = "\<a href=\\"mailto:toja@stambokaj.se\\"\>Maila mig\</a\>";
$text = strLinks($text);

I detta så ignorerar den inte det som ligger inom HTML-taggar, fast det fungerar fint om det är en vanlig http eller www adress..!!

Någon som vet lösningen...?!!

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

## #2 — toja, 2006-04-14T22:25Z

Ingen... Mungo kanske..?!

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

## #3 — toja, 2006-04-14T23:54Z

Verkar som att den fungerar på detta sätt nu:

1\. detta är en giltig epost, <toja@stambokaj.se>
2\. detta är en giltig epost, mailto:toja@stambokaj.se

Alltså blir detta:
\<a href="mailto:toja@stambokaj.se"\>Maila mig\</a\>

så här:
\<a href="\<a href=\\"mailto:mailto:toja@stambokaj.se\\"\>mailto:toja@stambokaj.se\</a\>"\>Maila mig\</a\>

Någon som kan lösa detta problem... eller är alla på hela forumet lika "lost" som mig på detta??

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

## #4 — hampus_b, 2006-04-16T15:50Z

got it

fullösning.
vi utgår från att alla e-postadresser måste föregås av ett mellanslag eller en radbrytning.

tjoho,

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

//hampus brynolf

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

## #5 — toja, 2006-04-16T19:34Z

Hmm... Hampus skript fungera inte heller riktigt rätt!

nu genererar den så här:
\<a href="mailto:\<br /\>toja@stambokaj.se"\>\<br /\>

alltså fungerar det nästan... men kan man få den att skriva ut utan \<br /\> ??!
hur fungerar $0 ..?! kan man ange vilket som ska vara i den..?!

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

## #6 — hampus_b, 2006-04-16T21:10Z

tja, det beror ju på vad du skickar in... jag utgick från ditt exempel: 

```php
$text = "<a href=\"mailto:toja@stambokaj.se\">Maila mig</a>";
$text = strLinks($text);
```

output:

```
<a href="mailto:toja@stambokaj.se">Maila mig</a>
```

Det blir inga fel.... inga \<br\>. 

$0 refererar tillbaks till matchningen som görs i preg_replace.

//h

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

## #7 — toja, 2006-04-17T12:31Z

hmm... kanske beror på att jag har en nl2br funktion precis efter...??

$text = "\<a href=\\"mailto:toja@stambokaj.se\\"\>Maila mig\</a\>"; 
$text = strLinks($text); 
$text = nl2br($text);

men tycker endå det verkar konstigt.. ska kolla det där!

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

## #8 — hampus_b, 2006-04-17T13:42Z

vet ej. blir inget fel här - funkar precis som det ska - även med nl2br. Det finns ju inga radbrytningar med i $text.

Men om det skulle finnas med radbrytningar i $text, så kommer de förstås att konverteras till \<br\>...

//h

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

## #9 — nkrantz, 2006-04-17T14:06Z

Testa köra nl2br innan du kör strLinks...

// Nippe

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

## #10 — hampus_b, 2006-04-17T14:38Z

yesss. du har så rätt så. fixat (men inte buggfritt). ska man göra det här på rätt sätt är det ett gigantiskt jobb - vi måste bla kontrollera om vi befinner oss inne i en lång tag (en a som sträcker sig över flera rader), etc. För att inte tala om hur man ska hantera felformaterade html-dokument...

nåja; det här borde lösa dina flesta problem:

```php

<?
$text = <<<EOL
 toja@stambokaj.se FUNKAR
toja@stambokaj.se FUNKAR
asd.asd@sdasd.sdad.se FUNKAR

a@b.se FUNKAR

<a href="mailto:toja@test.se">sads</a> FUNKAR

<a href="mailto:
toja@test.se">sads</a> FUNKAR INTE

toja@
test.se FUNKAR INTE

EOL;

$text = strLinks($text);
$text = nl2br($text);
echo $text; 

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

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

## #11 — toja, 2006-04-17T15:54Z

Toppen Hampus, du fixa det!

Jag är nöjd med resultatet, men tänker inte acceptera svaret som slutgiltigt...
För jag tror att det går att lösa smidigare, genom att på något sätt göra som de andra, där man kollar om länken omsluts av html-taggar... jag har provat mig fram men fattar inte riktigt hur det fungerar.. men någon kanske vet!??

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

## #12 — hampus_b, 2006-04-17T18:36Z

allt går :) 

ett problem med att matcha e-postadresser är att man förr eller senare börjar matcha saker som inte är e-postadresser... 

om detta ska betraktas som en e-postadress:

```
test.
test@
dummymail.
com
```

ja, där är det rätt mycket som inte är adresser som kommer att tolkas som det. det förbättring som jag ser man kan göra i regexpen är att kontrollera att man verkligen inte är inuti en tag. men då kommer frågan hur vi hanterar följande scenario:

```
<<BACKA. 
pelle@pelikan.se heter jag och jag gick från hit > dit
```

inte för att det är korrekt (html)kod, men för att illustrera problemet med var taggar börjar och slutar i verkligheten...

men visst går det att göra smidigare!

mer info för hur regexpar fungerar hittar du på:
<http://se2.php.net/preg_replace>
<http://se2.php.net/manual/en/reference.pcre.pattern.syntax.php>
<http://se2.php.net/manual/en/reference.pcre.pattern.modifiers.php>

//hampus

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

## #13 — toja, 2006-04-17T20:18Z

Jag ger mig, tummen upp för dig Hampus! Jag fick ju den hjälp jag sökte i alla fall!

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

## #14 — hampus_b, 2006-04-18T11:56Z

hehe :)

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

---

Tråden på webben: https://www.webforum.nu/amne/php/145504-hitta-i-skriptarkivet-fungerar-inte-100
