200 p på højkant!
Hej eksperter!Jeg vil gerne have nedenstående function tagster_format() udvidet, således at urls til gif's, jpg's og andre billedformater omdannes til rigtige billeder og ikke til links, som det er tilfældet pt.
200 point til den der laver en god og skudsikker løsning!
---------------------------
<?php
function tagster_format($str, $target="_blank", $css_class="", $fixlongword = 0) {
$str = str_replace("&", "&", $str);
$str = tagster_url($str, $target, $css_class);
$str = tagster_email($str, $css_class);
$str = tagster_fix_endchar($str);
$str = str_replace("\t", " ", $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\:|\(|\[|\>)(www\.)([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i", "\\1<a href=\"http://\\2\\3\"".$ins_str.">\\2\\3</a>", $str);
$str = preg_replace ("/(\s|tp\:|\(|\[|\>)(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 .= '­';
$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);
}
?>
