Avatar billede dennism Nybegynder
23. juni 2003 - 16:27 Der er 21 kommentarer og
3 løsninger

PHP: tags

Jeg er igang med at lave et site, hvorpå der er et brugersystem, hvor man f.eks. kan skrive noget om sig selv.

I mysql hedder kolonnen, som indeholder denne tekst, text.
Men hvordan laver jeg sådan, at hvis f.eks. text (jeg bruger mySQL) indeholder <link>http:www.eksperten.dk</link> så bliver det lavet om til en link?

Man skal selvfølgelig kunne lave andre tags end link, men hvis jeg ikke selv kan finde ud af at lave den, vil jeg også skrive her. Men det kan jo være, at jeg selv kan lave dem, når jeg først ved hvordan gør det med <link>
Avatar billede schaefner Juniormester
23. juni 2003 - 16:32 #1
$str = '<link>http://www.eksperten.dk</link> hej hej <link>http://www.eksperten.dk</link>';
$str = eregi_replace("<link>([^<]+)</link>","<a href=\"\\1\">\\1</a>",$str);
echo $str;
Avatar billede Slettet bruger
23. juni 2003 - 16:32 #2
Lige præcis links findes der en masse færdig lavede scripts til at tage sig af.... f.eks. http://www.ljweb.dk/?Ref=usefulscripts (tagster_lib)
Men ellers så find ud af hvilke tags du vil tillade også brug strip_tags() - // http://dk.php.net/manual/en/function.strip-tags.php
F.eks.
$tilladtetags = "<a><b><i><u>";
$streng = strip_tags($streng, $tilladtetags);
Avatar billede exp Juniormester
23. juni 2003 - 16:34 #3
$str = eregi_replace("(( |\n|\r)((f|ht)tp://)([a-z0-9@:%_.~#\-\?&-]+)((\=|[a-z0-9]|\?|&|\/|\.|-|:|æ|ø|å)+){0,})", " <a href='\\1' target='".$target."' class='main'>\\1</a> (".$target.")", $str);
        $str = eregi_replace("([ |\n|\r](www)([a-z0-9@:%_.~#\-\?&-]+)((\=|[a-z0-9]|\?|&|\/|\.|-|:|æ|ø|å)+){0,})", " <a href='http://\\1' target='".$target."' class='main'>\\1</a> (".$target.")", $str);
        $str = ereg_replace("\[link=http://([^]]+)\]", "<a href='http://\\1' target='".$target."' class='main'>", $str);
        $str = ereg_replace("\[link=www([^]]+)\]", "<a href='http://www\\1' target='".$target."' class='main'>", $str);
        $str = ereg_replace("\[/link\]", "</a> (".$target.")", $str);
       
        print ($str);
    }


Synes det er alt for mange point - i mine øjne havde du ikke behøvet mere en 30 point for den løsning (eller evt brugt søgefunktionen)
Avatar billede schaefner Juniormester
23. juni 2003 - 16:37 #4
og en lille tilføjelse:

$str = '<link>http://www.eksperten.dk</link> hej hej <link>www.eksperten.dk</link>';
$str = eregi_replace("<link>(www([^<]+))</link>","<a href=\"http://www\\2\">\\1</a>",$str);
$str = eregi_replace("<link>([^<]+)</link>","<a href=\"\\1\">\\1</a>",$str);
echo $str;
Avatar billede dennism Nybegynder
23. juni 2003 - 16:49 #5
regin >>

Hvis jeg bruger strip_tags, hvordan klarer jeg så den med links?
Avatar billede schaefner Juniormester
23. juni 2003 - 16:53 #6
du bruger strip_tags først og laver dine links bagefter
Avatar billede dennism Nybegynder
23. juni 2003 - 17:09 #7
Jeg har nu denne:
$mysql_row[text] = "<a>test</a>";
$mysql_row[text] = strip_tags($mysql_row[text], '<big><b><i><u><s><br><center>');

Det giver bare: test.
Men man ikke gøre sådan at den skriver <a></a> istedet for bare at ignorere den?
Avatar billede exp Juniormester
23. juni 2003 - 17:16 #8
$mysql_row[text] = "<a>test</a>";
$mysql_row[text] = strip_tags($mysql_row[text], '<big><b><i><u><s><br><center><a>');

eller

$mysql_row[text] = "<a>test</a>";
$mysql_row[text] = str_replace("<", "&lt;", $mysql_row[text]);
$mysql_row[text] = str_replace(">", "&gt;", $mysql_row[text]);
$mysql_row[text] = strip_tags($mysql_row[text], '<big><b><i><u><s><br><center>');
Avatar billede schaefner Juniormester
23. juni 2003 - 17:16 #9
$mysql_row[text] = '<a href="http://exp.dk">Eksperten.dk</a>';
$mysql_row[text] = strip_tags($mysql_row[text], '<big><b><i><u><s><a><br><center>');
Avatar billede dennism Nybegynder
23. juni 2003 - 17:20 #10
Undskyld i forstod mig ikke.. Jeg vil ikke have den til at bruge <a>, men istedet for at fjerne de tags der ikke accepteres, vil jeg have at den viser dem som de er skrevet!
Forstår I!?
Avatar billede schaefner Juniormester
23. juni 2003 - 17:21 #11
$mysql_row[text] = '<a href="http://exp.dk">Eksperten.dk</a>';
$mysql_row[text] = htmlspecialschars($mysql_row[text]);
Avatar billede exp Juniormester
23. juni 2003 - 17:22 #12
$mysql_row[text] = "<a>test</a>";
$mysql_row[text] = str_replace("<", "&lt;", $mysql_row[text]);
$mysql_row[text] = str_replace(">", "&gt;", $mysql_row[text]);
$mysql_row[text] = strip_tags($mysql_row[text], '<big><b><i><u><s><br><center>');
Avatar billede schaefner Juniormester
23. juni 2003 - 17:22 #13
hov:
$mysql_row[text] = htmlspecialchars($mysql_row[text]);
Avatar billede dennism Nybegynder
23. juni 2003 - 17:24 #14
schaefner >>
htmlspecialschars fjerner jo alle tags! Kan jeg ikke gøre sådan, at den ikke fjerner: <big><b><i><u><s><a><br><center> ?
Avatar billede schaefner Juniormester
23. juni 2003 - 17:24 #15
den fjerner dem ikke
Avatar billede schaefner Juniormester
23. juni 2003 - 17:25 #16
http://dk2.php.net/manual/en/function.htmlspecialchars.php

Den gør lige præcis det du be'r om.
Avatar billede dennism Nybegynder
23. juni 2003 - 17:25 #17
Hvad gør den så?
Avatar billede schaefner Juniormester
23. juni 2003 - 17:26 #18
prøv at se linket
Avatar billede dennism Nybegynder
23. juni 2003 - 17:28 #19
Kan du ikke lige forklare! Jeg kan ikke se hvad gavn denne funktion han have i mit tilfælde!?
Avatar billede schaefner Juniormester
23. juni 2003 - 17:31 #20
den laver f.eks. '<' om '&lt;' og '>' om til '&gt;'

så f.eks. <a href="http://exp.dk">Eksperten.dk</a> vil blive til:

&lt;a href=&quot;http://exp.dk&quot;&gt;Eksperten.dk&lt;/a&gt; og det vil derfor ikke blive opfattet som et link, men som almindelig tekst.
Avatar billede dennism Nybegynder
23. juni 2003 - 17:37 #21
Ohh.. Ja, det er også meget fint! Men det har jeg nu ikke brug for!

Jeg har:

$mysql_row[text] = "<a><b>test</b></a>";
$mysql_row[text] = strip_tags($mysql_row[text], '<big><b><i><u><s><br><center>');

Hvis jeg efterfølgende printer denne, vil der stå "test" med fed skrift.
Men jeg vil have at der skal stå "<a>test</a>" med fed skrift.

Forstår du?
Avatar billede schaefner Juniormester
23. juni 2003 - 17:44 #22
hmm, det er vidst nemmest hvis du gør sådan:
$str = '<a>test</a>';
$str = htmlspecialchars($str);
$str = str_replace('','<b>',$str);
$str = str_replace('
','</b>',$str);
echo $str;
Avatar billede schaefner Juniormester
23. juni 2003 - 17:45 #23
og det kunne så se således ud: http://disneyzone.dk/str.php

er det ikke sådan du ønsker?
Avatar billede dennism Nybegynder
23. juni 2003 - 17:48 #24
Jeg tror jeg har fået den hjælp jeg behøver.. Venter lige med at lukke, til jeg ved at det fungerer som det skal!
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