Avatar billede lademan Novice
10. december 2003 - 10:37 Der er 49 kommentarer og
1 løsning

Tilføjelse til tagster i forum

Mit problem er, at ALLE urls bliver omdannet til rigtige links i nedenstående kode, herunder også urls til billeder.

Jeg vil nemlig gerne have urls til billeder lavet om til rigtige billeder, således at http://www.sol.dk/logo.gif bliver til <img scr="http://www.sol.dk/logo.gif">

Urls til ikke-billeder skal forblive links, sådan som koden på fremragende vis sørger for pt.

Jeg bruger funktionerne i fx et forum således:
$row[indhold] = tagster_format($row[indhold]);

Mange tak for hjælpen og god jul!

-----------------------------
<?php
function tagster_format($str, $target="_blank", $css_class="", $fixlongword = 1) {
    $str = str_replace("&", "&amp;", $str);
    $str = tagster_url($str, $target, $css_class);
    $str = tagster_email($str, $css_class);
    $str = tagster_fix_endchar($str);
    $str = str_replace("\t", "&nbsp;&nbsp;&nbsp; ", $str);
    $str = str_replace("\r", "", $str);
    $str = str_replace("\n", "<br>", $str);
    if ($fixlongword != 0) $str = tagster_fix_longword($str, $fixlongword);
    return $str;
}
function tagster_url($str, $target, $css_class) {
    $ins_str = "";
    if ($css_class) $ins_str .= " class=\"".$css_class."\"";
    if ($target) $ins_str .= " target=\"".$target."\"";
    $str = tagster_expand($str);
    $str = preg_replace ("/(ftp|http|https|telnet|news|nntp|file|irc):\/\/([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i", "<a href=\"\\1://\\2\"".$ins_str.">\\1://\\2</a>", $str);
    $str = preg_replace ("/(\s|tp\:|\(|\[|\&gt;)(www\.)([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i", "\\1<a href=\"http://\\2\\3\"".$ins_str.">\\2\\3</a>", $str);
    $str = preg_replace ("/(\s|tp\:|\(|\[|\&gt;)(ftp\.)([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i", "\\1<a href=\"ftp://\\2\\3\"".$ins_str.">\\2\\3</a>", $str);
    return tagster_reduce($str);
}
function tagster_email($str, $css_class="") {
    $ins_class = "";
    if ($css_class) $ins_class = " class=\"".$css_class."\"";
    $str = tagster_expand($str);
    $str = preg_replace ("/([\s\"])([\w\.\-_]+)@([\w\-_]+)\.([\w\.\-_]+)/i", "\\1<a href=\"mailto:\\2@\\3.\\4\"".$ins_class.">\\2@\\3.\\4</a>", $str);
    return tagster_reduce($str);
}
function tagster_fix_endchar($str) {
    $str = preg_replace ("/([\'\"\)\]\.\,\?\!]+)\">/i", "\">", $str);
    $str = preg_replace ("/([\'\"\)\]\.\,\?\!]+)\" (target|class)=\"/i", "\" \\2=\"", $str);
    $str = preg_replace ("/([\'\"\)\]\.\,\?\!]+)<\/a>/i", "</a>\\1", $str);
    return $str;
}
function tagster_fix_longword($str, $maxlen = 10) {
    $sw = 0;
    $in_tag = false;
    $str_size = strlen($str);
    $res = "";
    for ($i=0; $i<$str_size; $i++){
        if ($str[$i] == '<') $in_tag = true;
        else if ($str[$i] == ' ') $sw = 0;
        if (!$in_tag && (($sw++) > $maxlen)) {
            $res .= '&shy;';
            $sw = 0;
        }
        if ($str[$i] == '>') $in_tag = false;
        $res .= $str[$i];
    }
    return $res;
}
function tagster_expand($str) {
    return " ".$str." ";
}
function tagster_reduce($str) {
    return substr($str, 1, -1);
}
?>
Avatar billede domaz.dk Novice
10. december 2003 - 10:42 #1
skriver bare lige en kommentar for at kunne se tråden oppe i min konto... har nemlig samme problem... :)
Avatar billede lademan Novice
10. december 2003 - 10:47 #2
Det vil virkelige blive en genial kode, hvis den ene tilføjelse kommer på plads!!
Avatar billede lademan Novice
10. december 2003 - 10:51 #3
Har selv forsøgt at rode med det et halvt års tid, men jeg kan ikke få det til at virke så optimalt, som resten af LjWebs kode lægger op til!
Avatar billede Slettet bruger
10. december 2003 - 11:58 #4
Prøv at indsætte denne her lige før return i tagster_url():

$str=preg_replace("<a href=\"([^\"]*)\">[^\s]</a>", "<img src=\"\\1\">",$str);
Avatar billede fangel Nybegynder
10. december 2003 - 14:40 #5
http://www.eksperten.dk/spm/435594
http://www.eksperten.dk/spm/437972

du må ikke oprette det samme spørgsmål 3 gange i træk ! (kun hvis der ingen svar er og der er gået over 2 uger)

Morten
Avatar billede lademan Novice
10. december 2003 - 16:22 #6
Hej Sandbox.

Jeg får følgende fejl: "Unknown modifier"...
Det ser ud til at den ikke er helt god.

Lademan :-)
Avatar billede roenving Novice
10. december 2003 - 16:40 #7
$str = preg_replace ("/<a href=\"([cefhilnprstw]{3,}:\/\/([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)\"[a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}\"]+>[cefhilnprstw]{3,}:\/\/([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+<\/a>/i", "<a href=\"\\1\><img src=\"\\1\"></a>", $str);

-- overhovedet ikke testet, for jeg har ikke noget php, men du kan da prøve den og melde tilbage !-)
Avatar billede lademan Novice
10. december 2003 - 16:54 #8
Damn - "Compilation failed: missing ) at offset 226 "
:-(
Avatar billede roenving Novice
10. december 2003 - 17:00 #9
Hov, ja, dem glemte jeg ...

$str = preg_replace ("/<a href=\"([cefhilnprstw]{3,}:\/\/[a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)\"[a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}\"]+>[cefhilnprstw]{3,}:\/\/[a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+<\/a>/i", "<a href=\"\\1\><img src=\"\\1\"></a>", $str);
Avatar billede lademan Novice
10. december 2003 - 17:04 #10
Der kommer ingen fejl, men urls til gifs laves desværre ikke til rigtige billeder.
Avatar billede lademan Novice
10. december 2003 - 17:24 #11
Har du et bud på, hvorfor det ikke virker? Vil du se kode?
Avatar billede lademan Novice
10. december 2003 - 17:51 #12
roenving  >>
Så vidt jeg kan se, tager den ikke højde for om urls har endelserne gif eller jpg?
Avatar billede roenving Novice
10. december 2003 - 18:14 #13
-- den glemte jeg ...

-- også !-)

$str = preg_replace ("/<a href=\"([cefhilnprstw]{3,6}:\/\/[a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+[\.jpg|\.gif|\.jpeg])\"[a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}\"]+>[cefhilnprstw]{3,}:\/\/[a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+<\/a>/i", "<a href=\"\\1\><img src=\"\\1\"></a>", $str);
Avatar billede lademan Novice
10. december 2003 - 18:20 #14
Hmm - ingen fejl, links virker fint, men billedelinks virker endnu ikke :-(
Avatar billede lademan Novice
10. december 2003 - 18:31 #15
Får du adgang til php roenvig, eller skal jeg lave en formular på en side, hvor du kan teste php?
Avatar billede lademan Novice
10. december 2003 - 19:36 #16
Du har ikke en mistanke om, hvor den kunne være gal?
Avatar billede Slettet bruger
10. december 2003 - 21:49 #17
Prøv igen... Nu har jeg også tilføjet, at den ligefrem nøjes med at lave billedlinks om ;-)

$str=preg_replace("/<a href=\"([^\"]*(\.jpg|\.gif|\.png))\">[^\s]<\/a>/", "<img src=\"\\1\">",$str);
Avatar billede Slettet bruger
10. december 2003 - 21:51 #18
Eventuelt denne istedet. Eneste forskel på denne og den lige før er, at denne er ligeglad med små og store bogstaver.

$str=preg_replace("/<a href=\"([^\"]*(\.jpg|\.gif|\.png))\">[^\s]<\/a>/i", "<img src=\"\\1\">",$str);
Avatar billede lademan Novice
11. december 2003 - 08:52 #19
Det virker desværre ikke? Prøv at tjekke efter! Codans !-)
Avatar billede Slettet bruger
11. december 2003 - 09:41 #20
Nu har jeg afprøvet, og så vidt jeg kan se virker denne. Du kan selv tilføje flere billedtyper, hvis du har brug for det. Husk, den skal gøres efter at tagster har lavet om til links.

echo preg_replace('/<a\shref\="([^"]+)(\.jpg|\.gif|\.png)">[^<]+<\/a>/i', '<img src="\\1">',$tekst);
Avatar billede Slettet bruger
11. december 2003 - 09:42 #21
Det var fra min eksempelkode... Her kommer versionen til direkte indsættelse i tagster.

$str=preg_replace('/<a\shref\="([^"]+)(\.jpg|\.gif|\.png)">[^<]+<\/a>/i', '<img src="\\1">',$str);
Avatar billede lademan Novice
11. december 2003 - 09:49 #22
Det virker ikke... :-(
Tjek evt selv.

Her er min forumkode:
---------------------------
include("tagster_lib.php");
$row[indhold] = tagster_format($row[indhold]);
print "$row[indhold]";

Her er min tagster:
---------------------------
<?php
function tagster_format($str, $target="_blank", $css_class="", $fixlongword = 0) {
    $str = str_replace("&", "&amp;", $str);
    $str = tagster_url($str, $target, $css_class);
    $str = tagster_email($str, $css_class);
    $str = tagster_fix_endchar($str);
    $str = str_replace("\t", "&nbsp;&nbsp;&nbsp; ", $str);
    $str = str_replace("\r", "", $str);
    $str = str_replace("\n", "<br>", $str);
    if ($fixlongword != 0) $str = tagster_fix_longword($str, $fixlongword);
    $str = preg_replace('/<a\shref\="([^"]+)(\.jpg|\.gif|\.png)">[^<]+<\/a>/i', '<img src="\\1">', $str);
    return $str;
}
function tagster_url($str, $target, $css_class) {
    $ins_str = "";
    if ($css_class) $ins_str .= " class=\"".$css_class."\"";
    if ($target) $ins_str .= " target=\"".$target."\"";
    $str = tagster_expand($str);
    $str = preg_replace ("/(ftp|http|https|telnet|news|nntp|file|irc):\/\/([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i", "<a href=\"\\1://\\2\"".$ins_str.">\\1://\\2</a>", $str);
    $str = preg_replace ("/(\s|tp\:|\(|\[|\&gt;)(www\.)([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i", "\\1<a href=\"http://\\2\\3\"".$ins_str.">\\2\\3</a>", $str);
    $str = preg_replace ("/(\s|tp\:|\(|\[|\&gt;)(ftp\.)([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i", "\\1<a href=\"ftp://\\2\\3\"".$ins_str.">\\2\\3</a>", $str);
    return tagster_reduce($str);
}
function tagster_email($str, $css_class="") {
    $ins_class = "";
    if ($css_class) $ins_class = " class=\"".$css_class."\"";
    $str = tagster_expand($str);
    $str = preg_replace ("/([\s\"])([\w\.\-_]+)@([\w\-_]+)\.([\w\.\-_]+)/i", "\\1<a href=\"mailto:\\2@\\3.\\4\"".$ins_class.">\\2@\\3.\\4</a>", $str);
    return tagster_reduce($str);
}
function tagster_fix_endchar($str) {
    $str = preg_replace ("/([\'\"\)\]\.\,\?\!]+)\">/i", "\">", $str);
    $str = preg_replace ("/([\'\"\)\]\.\,\?\!]+)\" (target|class)=\"/i", "\" \\2=\"", $str);
    $str = preg_replace ("/([\'\"\)\]\.\,\?\!]+)<\/a>/i", "</a>\\1", $str);
    return $str;
}
function tagster_fix_longword($str, $maxlen = 10) {
    $sw = 0;
    $in_tag = false;
    $str_size = strlen($str);
    $res = "";
    for ($i=0; $i<$str_size; $i++){
        if ($str[$i] == '<') $in_tag = true;
        else if ($str[$i] == ' ') $sw = 0;
        if (!$in_tag && (($sw++) > $maxlen)) {
            $res .= '&shy;';
            $sw = 0;
        }
        if ($str[$i] == '>') $in_tag = false;
        $res .= $str[$i];
    }
    return $res;
}
function tagster_expand($str) {
    return " ".$str." ";
}
function tagster_reduce($str) {
    return substr($str, 1, -1);
}
?>
Avatar billede lademan Novice
11. december 2003 - 09:52 #23
Avatar billede Slettet bruger
11. december 2003 - 10:03 #24
Den skal sættes ind i tagster_url, og nu er den rettet til, så den også tager højde for target (Det var det, der manglede

$str = preg_replace('/<a\shref\="([^"]+)(\.jpg|\.gif|\.png)"' . $ins_str . '>[^<]+<\/a>/i', '<img src="\\1">', $str);
Avatar billede Slettet bruger
11. december 2003 - 10:04 #25
Og den skal stå lige før return-linien i tagster_url
Avatar billede lademan Novice
11. december 2003 - 10:05 #26
Hvor i tagster_url vil du have den?
Avatar billede lademan Novice
11. december 2003 - 10:07 #27
Tæt på at virke, men ikke helt...
http://www.surfersinfo.dk/forum/view.php?id=976
Avatar billede Slettet bruger
11. december 2003 - 10:12 #28
Så tror jeg, vi er der.

$str = preg_replace('/<a\shref\="([^"]+(\.jpg|\.gif|\.png))"' . $ins_str . '>[^<]+<\/a>/i', '<img src="\\1">', $str);
Avatar billede lademan Novice
11. december 2003 - 10:15 #29
Det ser fandeme ud til at virke!!!!

Er der ikke en måde hvorpå, vi kan sikre, at maxbredden ikke overstiger 400 pixels?

Tjek fx her: http://www.surfersinfo.dk/forum/view.php?id=949
Avatar billede lademan Novice
11. december 2003 - 10:18 #30
Er det en skudsikker løsning, den du har lavet der? Jeg tænker på, om den tager højde for finurlige urls, store/små bogstaver etc?

Almindelige links gør den ikke noget ved?
Avatar billede lademan Novice
11. december 2003 - 10:25 #31
Ved godt, at jeg måske strammer den, men kunne man lave det således, at der var en fast bredde på fx 200 pixels, og at man så havde muligheden for at klikke på billedet, hvorefter billedet i rette proportioner poppede op i et nyt vindue?

Det ville være verdensklasse!!
Avatar billede Slettet bruger
11. december 2003 - 10:33 #32
Den tager højde for store/små bogstaver.

Derudover interessserer den sig ikke for andet en filendelsen i urlen. Selve urlen må ikke indeholde et " eller <, men hvis den gjorde, ville tagster nok også blive forvirret.

Det, den gør er at finde alle steder, hvor der står:

<a href="
en klump tegn, der ikke er "
en billedfilendelse og et "
den target og css insert, som tagster har lavet
>
en flok tegn, der ikke er <
</a>

og erstatte dem med

<img src="
en klump tegn, der ikke er " fra matchen
en billedfilendelse fra matchen
">

Jeg kan ikke lige komme på en måde at styre billedstørelsen uden at skulle hente billedet. Man kan sætte width og height på det, men så bliver alle billeder trukket til den størrelse, og det kan vist ikke være meningen.
Avatar billede lademan Novice
11. december 2003 - 10:34 #33
Er det her simpelthen den endelige kode:

$str = preg_replace('/<a\shref\="([^"]+(\.jpg|\.gif|\.png))"' . $ins_str . '>[^<]+<\/a>/i', '<a href="\\1" target="_blank" title="Klik på billedet for originale proportioner"><img src="\\1" width="300" border="0"></a>', $str);
Avatar billede Slettet bruger
11. december 2003 - 10:37 #34
Denne burde lave det som et link, og sætte billedbredde til 200 pixels.

$str = preg_replace('/(<a\shref\="([^"]+(\.jpg|\.gif|\.png))"' . $ins_str . '>)[^<]+<\/a>/i', '\\1<img src="\\2" width="200px" alt="\\2"></a>', $str);
Avatar billede Slettet bruger
11. december 2003 - 10:40 #35
Min sidste er bedre end din fra 10:34:00, for min benytter tagsters eget link. Det vil sige, at du kan sætte target i funktionskaldet lige som på de andre tagster-links.
Avatar billede lademan Novice
11. december 2003 - 10:44 #36
Perfekt!
Avatar billede lademan Novice
11. december 2003 - 10:45 #37
Perfekt arbejde!! Jeg er meget glad for din beskrivelse!!
Avatar billede lademan Novice
11. december 2003 - 10:46 #38
Jeg må ikke få din icq i tilfælde af, at jeg støder ind i et lille problem med tagsteren? Du virker til at have styr på det!!
Avatar billede Slettet bruger
11. december 2003 - 10:48 #39
25773325
Avatar billede lademan Novice
11. december 2003 - 10:51 #40
Endnu en gang. Mange tak !-)
Avatar billede lademan Novice
11. december 2003 - 15:16 #41
Der er ingen fanzy måder, hvorpå man kan sætte bredden i billeder til max lad os sige 350 pixels?
Avatar billede lademan Novice
11. december 2003 - 15:17 #42
Også billeder på eksterne servere?
Avatar billede Slettet bruger
11. december 2003 - 15:30 #43
Jeg kan ikke lige komme på nogen smarte måder, som bare vil sætte maxstørrelse for et billede. Det eneste, er at sætte en fast størrelse, men så bliver små billeder trukket ud til den størrelse.
Avatar billede lademan Novice
11. december 2003 - 15:32 #44
Ja, det med de små billeder er også den eneste ulempe. Det kan til gengæld også godt se lidt sjovt ud, hehe :-)
Avatar billede lademan Novice
11. december 2003 - 15:46 #45
Kunne man ikke lægge en style på billedet, der gør at store billeder stopper ved cellens intenderede slutning?
Avatar billede Slettet bruger
11. december 2003 - 16:04 #46
Det kunne man vel godt. Jeg ved bare ikke lige hvordan. Det er så absolut programmering i højere grad end layout, der er min stærke side.
Avatar billede lademan Novice
11. december 2003 - 16:15 #47
Har lagt mærke til det med programmeringen..
Avatar billede Slettet bruger
11. december 2003 - 16:20 #48
Jeg tror faktisk, et en eventuel style skulle sættes på tabel-cellen.
Avatar billede lademan Novice
11. december 2003 - 16:23 #49
Ok... måske noget overflow: scoll eller lign?
Mht programmering vs layout, så er det vel også et spørgsmål om udnyttelse af hver sin hjernehalvdel.
Avatar billede Slettet bruger
11. december 2003 - 16:33 #50
Ja, overflow: auto eller overflow: hidden burde virke. Standard for tabelceller er vistnok overflow: visible
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