Avatar billede anderseiler Nybegynder
14. juli 2005 - 23:24 Der er 10 kommentarer og
1 løsning

Seach i en streng og så erstatte

Hej..

Hvis jeg har en streng som hedder:

$tekst = "Jeg har en side som hedder www.noget.dk den er mega sej";

Hvordan gør jeg så sådan, at jeg hiver "www.noget.dk" ud, gør det til et link, og så sætter det ind igen?

Sig hvis jeg ikke har forklaret det ordentlig :)
Avatar billede webt Nybegynder
14. juli 2005 - 23:56 #1
Her er en funktion der tager http:// tekst links om til rigtige men den reagerer ikke bare på www, hvis du skal bruge det så sig lige til så klare vi den :)

men ind til videre får du lige den her

function url2link($str) { //samme som før
  return eregi_replace("((f|ht)tps?://)([a-z0-9@:%_.~#\-\?&-]+)((\=|[a-z0-9]|\?|&|\/|\.|-|:|æ|ø|å)+){0,}","<a href=\"\\0\" target=\"_blank\">\\0</a>", $str2);
}

Og så kører du bare din streng igennem:
$tekst = "Jeg har en side som hedder http://www.noget.dk den er mega sej";
echo url2link($tekst);

Og så skulle det gerne blive til et link

Mvh
Martin
Avatar billede anderseiler Nybegynder
15. juli 2005 - 08:44 #2
Okay tak..

Det skal helst også virke uden http://

Hvis du gider, vil du så ikke lige give en hurtig forklaring på hvordan funktionen fungerer? Så jeg selv kan lave den en anden gang? (:

Mvh
Anders
Avatar billede myplacedk Nybegynder
15. juli 2005 - 08:51 #3
Denne har en simplere og mere korrekt søgestreng. Den søger efter http(s):// og ftp://, og medtager alle efterfølgende tegn, som er gyldige i en url.

function uris2links($text) {
  return preg_replace('_((http|https|ftp)://[a-zA-Z0-9:@./+\_\-%?=&;#~]+)_', '<a
href="$1">$1</a>', $text);
}

(Kopieret fra et gammel projekt. Den er generaliseret, og jeg har ikke testet den efter jeg har tilpasset den.)
Avatar billede webt Nybegynder
15. juli 2005 - 09:09 #4
Der er da vist så vidt ingenting galt med den reg. Den medtager jo også æøå som også er gyldige tegn nu til dags men kan se der lige røg et $str2 ind det var ikke meningen så den skulle da ha været
function url2link($str) { //samme som før
  return eregi_replace("((f|ht)tps?://)([a-z0-9@:%_.~#\-\?&-]+)((\=|[a-z0-9]|\?|&|\/|\.|-|:|æ|ø|å)+){0,}","<a href=\"\\0\" target=\"_blank\">\\0</a>", $str);
}

og tager ligeledes både ftp:// http(s)://
Men nu skal vi jo ha den til at lave dem til links når den også skriver www. desvære er jeg nødt til at løbe har en aftale, men er tilbage igen kl 13 så finder vi en løsning hvis den ikke allerede er fundet :)

Mvh
Martin
Avatar billede webt Nybegynder
15. juli 2005 - 09:33 #5
Men lige en hurtig løsning som virker, og da også kan implementeres på myplacedk's løsning (samt en rettelse i regexpression så store bogstaver også kommer med:
function url2link($str) {
    if (strpos($str," www")) { $http="http://"; }
//check om der er www med mellemrum foran - hvis ja gem http:// i variablen vi bruger den bagefter
return eregi_replace("(((f|ht)tps?://)|(www))([a-zA-Z0-9æøåÆØÅ@:%_.~#\-\?&-]+)((\=|[a-zA-Z0-9]|\?|&|\/|\.|-|:|æ|ø|å|Æ|Ø|Å)+){0,}","<a href=\"$http\\0\" target=\"_blank\">\\0</a>", $str);
/*
søg gennem tekst med reg. expressions efter enten http(s):// ftp:// eller www - efterfølgende skal der findes et domæne eller en ip addresse -samt mulighed for brugernavn
og password i formatet http://bruger:pass@domæne - dette laves om til et link hvor vi sætter $http ind som er tom hvis linket var i http:// format men ikke er tom hvis det var i www format
*/
}
Men ja myplacedk's løsning er simplere den skal bare lige ha tilføjet æøåÆØÅ som tilladte bogstaver

Mvh
Martin
Avatar billede myplacedk Nybegynder
15. juli 2005 - 10:06 #6
Slå det op i manualen. ;-)
Der er også masser af tutorials om regular expressions, ingen grund til at gentage det her. :)
Avatar billede anderseiler Nybegynder
15. juli 2005 - 10:17 #7
Okay..

jeg skal desværre væk i 14 dage fra på.. Ja om en halv time kører jeg :P

Jeg tager min computer med og tester de ting som i har skrevet (ser om jeg selv kan finde ud af lidt)... Så deler jeg point ud når jeg kommer hjem.. Jeg har desværre ikke adgang til nettet når jeg er væk..

Men tak for de hurtige svar.. Jeg kigger på de forslag i har skrevet!

Mvh
Anders
Avatar billede anderseiler Nybegynder
15. juli 2005 - 10:24 #8
webt, den løsning du har skrevet aller nederst virker perfekt efter det som jeg skal bruge den til :)

Smid et svar min ven, så får du point (ellers gør myplacedk).... Hvis der ikke er et svar inden jeg kommer hjem der om 14 dage, så giver jeg dem bare til myplacedk... :) Ok?

Tak for hjælpen begge to

Mvh
Anders
Avatar billede webt Nybegynder
15. juli 2005 - 12:06 #9
Ja men jeg synes vi skal dele points, hvis det ikke havde været for myplacedk havde jeg ikke opdaget min fejl så hvis du deler ud mellem os så vil det være fint med mig :)

Mvh
Martin
Avatar billede anderseiler Nybegynder
26. juli 2005 - 13:24 #10
Okay. Jeg har lige fundet net her nede på pladsen :)

Desværre så det script jeg sagde var ok, det virker ikke. Den kan godt finde ud af det hvis linket er http://www.sw-inc.dk, men hvis man blot skriver www.sw-inc.dk, så linker den til /localhost/www.sw-inc.dk/... Og det er jo ikke helt planen :)

Mvh
Anders
Avatar billede webt Nybegynder
27. juli 2005 - 10:38 #11
Hej Anders,

Jeg havde ellers testet den og det virkede også i min begrænset test, men kan se når der er flere addresser så går det lidt galt pga min måde at teste på for www,

Men i en ny og forbedret udgave:
http://martin-nielsen.com/exp/632674/url2link.php - test den
http://martin-nielsen.com/exp/632674/url2link.phps - koden

Med de nye modifikationer ser det ud til at virke, undskylder problemerne

Fortsat god dag
Martin
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester