so, ich hab mal wieder n kleines problem
und zwar hab ich in meinem forum nen boardcode. natürlich alles marke eigenbau, aber trotzdem recht umfangreich. aber was wäre marke eigenbau ohne diverse bugs!
mein aktueller bug is folgender:
ich habe (wenn html abgeschaltet is) erstmal die html-zeichen umgewandelt mit
if($html == "1"){$dertext = htmlspecialchars($dertext);}
soweit so gut, als nächstes hab ich dann nen regulären ausdruck drin, der mir URLs im text findet und als link aufbereitet. leider hat der aber, weil ja vorher auch die & in & umgewandelt wurden beim ersten & in einer url abgebrochen, so dass ich nur halbe links hatte.
das hab ich jetzt gelöst indem ich den htmlspecialcars auskommentiert und dafür 5 entsprechende str_replace genommen hab, die das gleiche tun, so als notlösung. dabei werden erst vier zeichen umgewandelt und erst nach den URLs das &. das dumme is nur dass jetzt die bereits umgewandelten zeichen von dem &-umwandler nochmal angefallen werden.
Und damit jetzt n paar Leute meine ausführungen auch nachvollziehen können, hier mal der Quelltext, aber vorsicht, sind mehrere tausend zeilen .
die funktionen werden per include eingebunden und dann wird einfach im bedarfsfall die funktion "textbearbeitung" augerufen und der umzuwandelnde text als $dertext übergeben. Der entsprechende abschnitt is normalerweise viel größer, aber ich hab das für hier jetzt mal aufs wesentliche reduziert...
so, mein lögungsansatz wär jetzt folgender: Ich hau die fünf str_replace wieder raus und aktivier den htmlspecialcars wieder. sprich machs wies vorher war, und hab wieder das problem dass die urls "abgeknickt" werden.
und dann hoff ich auf eure hilfe, vielleicht kann mir jemand den regulären ausdruck oben bei $urlsearch[] so umschreiben dass er das richtig macht? ich hab nämlich dummerweise keine ahnung von regexp...
BTW hab ich im quelltext vom SMF-forum was interessantes gefunden, nen ellenlangen ausdruck, der mir jetzt zu lang war um ihn hier einzufügen ich denk mal damit könnt man was anfangen, ich habs aber net geschafft... Bei gelegenheit kann ich den (mit n paar zusätzlichen zeilenumbrüchen) hier posten.
Ich hoffe ihr könnt mir helfen!!
Matthias
und zwar hab ich in meinem forum nen boardcode. natürlich alles marke eigenbau, aber trotzdem recht umfangreich. aber was wäre marke eigenbau ohne diverse bugs!
mein aktueller bug is folgender:
ich habe (wenn html abgeschaltet is) erstmal die html-zeichen umgewandelt mit
if($html == "1"){$dertext = htmlspecialchars($dertext);}
soweit so gut, als nächstes hab ich dann nen regulären ausdruck drin, der mir URLs im text findet und als link aufbereitet. leider hat der aber, weil ja vorher auch die & in & umgewandelt wurden beim ersten & in einer url abgebrochen, so dass ich nur halbe links hatte.
das hab ich jetzt gelöst indem ich den htmlspecialcars auskommentiert und dafür 5 entsprechende str_replace genommen hab, die das gleiche tun, so als notlösung. dabei werden erst vier zeichen umgewandelt und erst nach den URLs das &. das dumme is nur dass jetzt die bereits umgewandelten zeichen von dem &-umwandler nochmal angefallen werden.
Und damit jetzt n paar Leute meine ausführungen auch nachvollziehen können, hier mal der Quelltext, aber vorsicht, sind mehrere tausend zeilen .
PHP-Code:
function formaturl($url, $title="", $maxwidth=60, $width1=40, $width2=-15)
{
if(!trim($title)) $title=$url;
if(!preg_match("/[a-z]:\/\//si", $url)) $url = "http://$url";
if(strlen($title)>$maxwidth) $title = substr($title,0,$width1)."...".substr($title,$width2);
return "<a href=\"$url\" onclick=\"window.open('$url'); return false;\">".str_replace("\\\"", "\"", $title)."</a>";
}
function formatimg($url)
{
//+++ hier wird das [img][/img] in eine bild-url umgewandelt
...
}
function prepare_code($out)
{
if(!isset($searcharray) && !isset($replacearray))
{
global $db;
$urlsearch[]="/([^]_a-z0-9-=\"'\/])((https?|ftp):\/\/|www\.)([^ \r\n\(\)\*\^\$!`\"'\|\[\]\{\};<>]*)/si";
$urlsearch[]="/^((https?|ftp):\/\/|www\.)([^ \r\n\(\)\*\^\$!`\"'\|\[\]\{\};<>]*)/si";
$urlreplace[]="\\1[URL]\\2\\4[/URL]";
$urlreplace[]="[URL]\\1\\3[/URL]";
$out = preg_replace($urlsearch, $urlreplace, $out);
$searcharray[]="/\[url=(['\"]?)([^\"']*)\\1](.*)\[\/url\]/esiU";
$replacearray[]="formaturl('\\2','\\3')";
$searcharray[]="/\[url]([^\"]*)\[\/url\]/esiU";
$replacearray[]="formaturl('\\1')";
$searcharray[]="/\[img]([^\"]*)\[\/img\]/esiU";
$replacearray[]="formatimg('\\1')";
$threeparams = "/\[%s=(['\"]?)([^\"']*),([^\"']*)\\1](.*)\[\/%s\]/siU";
$twoparams = "/\[%s=(['\"]?)([^\"']*)\\1](.*)\[\/%s\]/siU";
$oneparam = "/\[%s](.*)\[\/%s\]/siU";
$result = send_sql($db,"SELECT bbcodetag,bbcodereplace,params FROM cc_boardcode");
$anz=mysql_num_rows($result);
for($ix=0;$ix<=$anz;$ix++)
{
$row = mysql_fetch_array($result,MYSQL_ASSOC);
if($row[params]==0) continue;
if($row[params]==1) $search = sprintf($oneparam, $row[bbcodetag], $row[bbcodetag]);
if($row[params]==2) $search = sprintf($twoparams, $row[bbcodetag], $row[bbcodetag]);
if($row[params]==3) $search = sprintf($threeparams, $row[bbcodetag], $row[bbcodetag]);
$searcharray[] = $search;
$replacearray[] = $row[bbcodereplace];
}
}
$out = preg_replace($searcharray, $replacearray, $out);
return $out;
}
// ************************************** Textbearbeitung ************************************ //
function textbearbeitung($dertext,$html)
{
global ...
...
global ...
//*** HTML-zeichen killen
// if($html == "1"){$dertext = htmlspecialchars($dertext);}
if($html == "1")
{
$dertext = str_replace("<","<",$dertext);
$dertext = str_replace(">",">",$dertext);
$dertext = str_replace("\'","'",$dertext);
$dertext = str_replace("\"",""",$dertext);
}
//*** Code einfügen
$dertext = str_replace("\n\n","<br> <br>",$dertext);
$dertext = str_replace("\n","<br>",$dertext);
$dertext = prepare_code($dertext);
//*** restliche HTML-zeichen killen...
if($html == "1")
{
$dertext = str_replace("&","&",$dertext);
}
return $dertext;
}
so, mein lögungsansatz wär jetzt folgender: Ich hau die fünf str_replace wieder raus und aktivier den htmlspecialcars wieder. sprich machs wies vorher war, und hab wieder das problem dass die urls "abgeknickt" werden.
und dann hoff ich auf eure hilfe, vielleicht kann mir jemand den regulären ausdruck oben bei $urlsearch[] so umschreiben dass er das richtig macht? ich hab nämlich dummerweise keine ahnung von regexp...
BTW hab ich im quelltext vom SMF-forum was interessantes gefunden, nen ellenlangen ausdruck, der mir jetzt zu lang war um ihn hier einzufügen ich denk mal damit könnt man was anfangen, ich habs aber net geschafft... Bei gelegenheit kann ich den (mit n paar zusätzlichen zeilenumbrüchen) hier posten.
Ich hoffe ihr könnt mir helfen!!
Matthias
Kommentar