Avatar billede webcreator Nybegynder
24. september 2004 - 21:07 Der er 20 kommentarer og
1 løsning

BB-lignende kode til et alm. link

Hej Eksperter.

Jeg sidder og arbejder på en løsning hvor jeg skal lave noget BB-lignende kode om til et link. Jeg har fundet en løsning, hvor jeg kan lave flg. til et link :

[link]www.test.dk[/link]

Desværre giver denne løsning anledning til en fatal fejl, hvis [/link] undlades. Dette fordi jeg splitter det op på flg. måde :

[link] = <a href="
adresse= www.test.dk
[/link]= ">Link</a>

Som I næsten kan regne ud, får jeg et åbent link, hvis [/link] undlades - og det ødelægger hele strukturen i mit website.

Hvordan kan det gøres smartere ? Meget gerne en løsning, hvor flg. kan genbruges :

function form($content) {
   
    $content = nl2br(htmlentities($content));
   
    $from=Array("[link]", "[/link]");
    $to=Array("<a href=\"http://", "\">Link</a>");
   
    return str_replace($from,$to);
   
}
Avatar billede 7th Praktikant
24. september 2004 - 21:19 #1
Jeg tror du vil få mere gavn af et regexp udtryk, som leder efter [link]www.link.com[/link]. Det kunne for eksempel være en preg_replace() funktion, som ser således ud.

function myTagster($content)
{
    return preg_replace("(\[link\](.+?)\[\/link])i" , '<a href="$1">$1</a>' , $content);
}

echo myTagster("[link]www.link.com[/link]");
Avatar billede webcreator Nybegynder
24. september 2004 - 21:26 #2
Og hvor kommer $1 og $2 fra?
Avatar billede webcreator Nybegynder
24. september 2004 - 21:26 #3
Vrøvl - mente bare $1
Avatar billede 7th Praktikant
24. september 2004 - 21:38 #4
$1 er en slags reference, hvis man kan kalde det, til (.+?), altså det der står mellem [link] og [/link]. $2 bruges hvis du har flere ting i samme preg_replace(), som skal erstattes. For eksempel preg_replace ("/\[link\=(.+?)\](.+?)\[/link\]/" , '<a href="$1">$2</a>' , $content);
Avatar billede webcreator Nybegynder
24. september 2004 - 21:39 #5
Ok, det var smart :)
Avatar billede 7th Praktikant
24. september 2004 - 21:45 #6
Hvis det kan bruges, så er her et svar :)
Avatar billede webcreator Nybegynder
24. september 2004 - 21:48 #7
Kan din løsning på en nem måde sammenfattes med hele min nuværende funktion? :

function form($content) {
   
    $content = nl2br(htmlentities($content));
   
    $from=Array("[sub]", "[/sub]", "[alfa]", "[beta]", "[gamma]", "[link]", "[/link]");
    $to=Array("<sub>", "</sub>", "&alpha;", "&beta;", "&gamma;", "<a href=\"http://", "\">Link</a>");
   
    return str_replace($from,$to, $content);
   
}

- Gerne uden, at der både skal laves en preg_replace og en
Avatar billede 7th Praktikant
24. september 2004 - 21:54 #8
Hvad står [alfa], [beta] og [gamma] for? Er det [beta]tekst[/beta] eller blot [beta] = "&beta;?
Avatar billede webcreator Nybegynder
24. september 2004 - 21:55 #9
Det er blot [beta] = &beta;
Avatar billede 7th Praktikant
24. september 2004 - 22:06 #10
Prøv dette...

<?php
$input = "Mit website [link]www.site.com[/link] hedder [alfa], [beta], [gamma], og findes via [sub]substi[/sub]";

function myTagster($content)
{
    $chr = array("[alfa]" => "&alpha;" , "[beta]" => "&beta;" , "[gamma]" => "&gamma;");

    $content = nl2br(htmlentities($content));
    $content = strtr($content , $chr);
    $content = preg_replace("/\[link\](.+?)\[\/link]/" , '<a href="http://$1">$1</a>' , $content);
    $content = preg_replace("/\[sub\](.+?)\[\/sub]/" , '<sub>$1</sub>' , $content);

    return $content;
}

echo myTagster($input);
?>
Avatar billede webcreator Nybegynder
24. september 2004 - 22:16 #11
Jeg tror ikke løsningen er helt god.

Jeg har 20 [noget]værdi[/noget]-koder - så at kører $content igennem over 20 gange, er langt fra optimalt
Avatar billede webcreator Nybegynder
24. september 2004 - 22:17 #12
Kan det optimeres ?
Avatar billede 7th Praktikant
24. september 2004 - 22:24 #13
Mig bekendt køres $content kun igennem en gang i funktionen. Forstået på den måde, at for eksempel, så tager preg_replace("/\[link\](.+?)\[\/link]/" , '<a href="http://$1">$1</a>' , $content) alle forekomster af [link]tekst[/link] på en gang. Den erstatter ikke en [link]tekst[/link] af gangen, også kører $content igennem igen for at finde næste [link]tekst[/link]. Hvis du forstår?

Jeg tror ikke jeg kan optimerer den mere end den er nu, desværre.
Avatar billede webcreator Nybegynder
24. september 2004 - 22:27 #14
Nej, det er jeg helt klar over :)
Men forestil dig at jeg har 20 [noget]værdi[/noget]-koder. Så skal jeg køre teksten i $content igennem 20 gange, for at lede efter hver type BB-kode
Avatar billede webcreator Nybegynder
24. september 2004 - 22:29 #15
$content = preg_replace("/\[sub\](.+?)\[\/sub]/" , '<sub>$1</sub>' , $content);
$content = preg_replace("/\[sup\](.+?)\[\/sup]/" , '<sup>$1</sup>' , $content);
$content = preg_replace("/\[bold\](.+?)\[\/bold]/" , '<b>$1</b>' , $content);

osv osv :)
Avatar billede 7th Praktikant
24. september 2004 - 22:40 #16
Nåå, på den måde :) Det var da en forfærdelig masse tags du har. Mit eneste forslag er at downloade Invision Power Board og phpBB, og kigge deres source igennem, og se hvordan de har gjort det.

Et meget lille fingerpeg omkring genereringstid med funktionen i brug kan ses via http://www.jongbiz.dk/tagster.php
Avatar billede webcreator Nybegynder
24. september 2004 - 22:41 #17
Ja, tiden fejler ikke noget - men hvis der er tusindvis af brugere på siden hver dag, og de til sammen skriver 2 A4 sider, så tager det jo lidt tid ;)
Avatar billede 7th Praktikant
24. september 2004 - 22:51 #18
Måske skulle du så kigge på preg_match_all(), men der går jeg altså kold i de regexp, så må du selv prøve dig frem :)
Avatar billede webcreator Nybegynder
24. september 2004 - 23:01 #19
Yep, vil jeg kigge på - du skal i hvertfald have mange tak for hjælpen :-)
Avatar billede 7th Praktikant
24. september 2004 - 23:07 #20
Tak for points :) Omkring preg_match_all(), http://dk.php.net/manual/da/function.preg-match-all.php, tænker jeg især på bruger posten, hex6ng at yahoo dot com, 03-Jul-2004 12:04.
Avatar billede webcreator Nybegynder
25. september 2004 - 10:23 #21
Perfekt - den kigger jeg lidt ekstra på ;)
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