Jamen, så fik jeg da kigget på det !-)
Koden herunder virker, men den kan ikke klare flere af den samme type (dvs. hvis de skal udskiftes af den samme replace-linje), så det kræver at strengen splittes før den sendes igennem.
Den er ikke alvorligt stress-testet, men jeg har haft den igennem alle de eksempler, som forekom i den oprindelige test-tråd (den jeg refererer til ovenfor) -- de eneste gange, den opfører sig anderledes er ved ovenfornævnte gentagelser.
Håber du kan bruge det !-)
<SCRIPT LANGUAGE="javascript" TYPE="text/javascript">
/*
****Original file desciption:*********************
****File : tagster_lib.php
****Version : 3.0
****Date : September 22nd, 2002
****Author : Lars B. Jensen, lars.jensen@ljweb.com
****
****Module Description
****Module to transform URL and E-Mail addresses into clickable links.
****
****Instruction
****To utilize the tagster_lib library, copy this file to a location on your server. Include the
****library into your php document or template.
****Use the function tagster_format to extract and modify all links and emails in a given string.
****The parameters $target handling the target for links and $class for handling css on <a> tags are
****both optional.
****
****Example
****include('lib/tagster_lib.php');
****$str = tagster_format($str, "_blank", "mystyle");
****
****Note
****This module library has support for the scandinavian specialchars æ, ø and å.
****
****
****Public Functions
****--------------------------------------------------------------´
****function tagster_format($str, $target, $css_class, $fixlongword)
****function tagster_url($str, $target, $class)
****function tagster_email($str, $class)
****
****Private Functions
****--------------------------------------------------------------´
****function tagster_fix_endchar($str)
****function tagster_expand($str)
****function tagster_reduce($str)
****function tagster_fix_longword($str, $maxlen)
************************************************
Rewritten june 2003 by roenving
Transformation to javascript-functions
Added Private function:
function str_replace(ch,nch,str)
*/
function tagster_format(str, target, css_class, fixlongword) {
switch(tagster_format.arguments.length){
case 3:
fixlongword = 0;
break;
case 2:
fixlongword = 0;
css_class = "";
break;
case 1:
fixlongword = 0;
css_class = "";
target="_blank";
}
str = str_replace("&", "&", str);
str = str_replace("<", "<", str);
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(" ", " ", 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 = str.replace (/(ftp|http|https|telnet|news|nntp|file|irc):\/\/([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i, "<a href='\$1://\$2'"+ins_str+">\$1://\$2</a>");
str = str.replace (/(\s|tp\:|\(|\[|\>)(www\.)([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i, "\$1<a href='
http://\$2\$3'"+ins_str+">\$2\$3</a>");
str = str.replace (/(\s|tp\:|\(|\[|\>)(ftp\.)([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i, "\$1<a href='
ftp://\$2\$3'"+ins_str+">\$2\$3</a>");
return tagster_reduce(str);
}
function tagster_email(str, css_class) {
if (tagster_email.arguments.length==1)css_class="";
ins_class = "";
if (css_class) ins_class = " class='"+css_class+"'";
str = tagster_expand(str);
str = str.replace (/([\s\"])([\w\.\-_]+)@([\w\-_]+)\.([\w\.\-_]+)/i, "\$1<a href='mailto:\$2@\$3.\$4'"+ins_class+">\$2@\$3.\$4</a>");
return tagster_reduce(str);
}
function tagster_fix_endchar(str) {
str = str.replace (/([\'\"\)\]\.\,\?\!]+)\">/i, "\42>");
str = str.replace (/([\'\"\)\]\.\,\?\!]+)\" (target|class)=\"/i, "\42 \$2=\42");
str = str.replace (/([\'\"\)\]\.\,\?\!]+)<\/a>/i, "</a>\$1");
return str;
}
function tagster_fix_longword(str, maxlen) {
if (tagster_fix_longword.arguments.length==1)maxlen = 10;
sw = 0;
in_tag = false;
str_size = str.length;
res = "";
for (i=0; i<str_size; i++){
if (str.charAt(i) == '<') in_tag = true;
else if (str.charAt(i) == ' ') sw = 0;
if (!in_tag && ((sw++) > maxlen)) {
res += '­';
sw = 0;
}
if (str.charAt(i) == '>') in_tag = false;
res += str.charAt(i);
}
return res;
}
function tagster_expand(str) {
return " "+str+" ";
}
function tagster_reduce(str) {
return str.substr(1, str.length-2);
}
function str_replace(ch,nch,str){
var chl = ch.length;
var nchl = nch.length;
var i = str.indexOf(ch);
while(i>-1){
str = str.substring(0,i)+nch+str.substring(i+chl);
i = str.indexOf(ch,i+nchl);
}
return str;
}
</SCRIPT>