Hallo Allerseits,
ich habe ein ziemlich großes Problem.
Für ein CMS habe ich bbcodes eingesetzt also [b] und [img] usw. Diese stehen in einer MySQL-Datenbank. Jetzt habe ich eine Funktion geschrieben, die das ganze wieder rücktransformiert. Nur leider dauert das unzumutbar lange (3-4 sek und mehr). Ich hab schon alles mögliche probiert aber ich komme irgendwie nicht zu einer optimierten Lösung.
Vielen Dank Eure Hilfe!
Hier hab ich mal meine Funktion txt_convert() mit angehängt:
function txt_convert($text) {
global $id,$lang,$session_link,$action,$show;
$words = explode(" ",$text);
$count_words = count($words)-1;
if($count_words >= 0)
{
for($i=0;$i<=$count_words;$i++)
{
$website_found=false;
$email_found=false;
$img_found=false;
if(strpos($words[$i], 'http://')===0) //Links umwandeln
{
if($words[$i]!="")
{
$short_link=substr($words[$i],0,$length);
$words[$i]='<a href="'.$words[$i].'" target="_blank">'.$short_link.'</a>';
$website_found=true;
}
}
if(ereg("^.+@.+\..+$", $words[$i]) ) //email-adressen umwandeln
{
$previous_at=substr($words[$i],0,strpos($words[$i],"@"));
$after_at=substr($words[$i],strpos($words[$i],"@")+1,strlen($words[$i]));
$words[$i]='<a href="../mail/mail.php?id='.$id.'&lang='.$lang.'&action=gbmessagemail&prev='.$previous_at.'&after='.$after_at.'&entry_number='.$entry_number.$session_link.'">'.$previous_at.'<img src="../images/buttons/st.gif" border="0">'.$after_at.'</a>';
$email_found=true;
}
if (strpos($words[$i], '[img]')>=0)
{
$words[$i] = ereg_replace('[\img]', ' <img src="', $words[$i]);
$words[$i] = ereg_replace('[/img]', '"> ', $words[$i]);
$img_found=true;
}
if (strpos($words[$i], '[uimg=')>=0)
{
$temp=substr($words[$i],strpos($words[$i], '[uimg=')+6,strlen($words[$i]));
$img_number=substr($temp,0, strpos($temp, ']'));
if ($img_number%2==0) $class_number="1";
else $class_number=$class_number="2";
$abfrage = "SELECT * FROM img WHERE ID=$img_number LIMIT 1";
$result= mysql_query($abfrage);
$row = @mysql_fetch_assoc($result);
$thumbnail='http://localhost/ffw/website/images/public/thumb_'.$row['img_url'];
$img_name=$row['img_name'];
// $show_img='<a href="showimg.php" title="'.$row['img_name'].'" class="img_art'.$class_number.'"><img src="'.$thumbnail.'" border="0"></a>';
$show_img="<table class="img_art$class_number"><tr><td bgcolor="#cccccc"><a href="javascript:NeuesFenster('http://localhost/ffw/website/content/showimg.php?id=$id&lang=$lang&img_number=$img_number',600,500)" name="Bild anzeigen" onMouseOver="window.status='Bild anzeigen'; return true;" onMouseOut="window.status=''; return true;" target="_top" title="$img_name"><img src="$thumbnail" border="0"><br><img src="http://localhost/ffw/website/images/buttons/lupe.gif" border="0"></a><font class="small">$img_name</font></td></tr></table>";
if ($action=="start" || $show=="imgcat") $show_img="";
$words[$i] = ereg_replace('[\uimg='.$img_number.']', $show_img, $words[$i]);
}
///Absätze hinzufügen
if (strpos($words[$i], '[absatz]')>=0)
{
$words[$i] = ereg_replace('[\absatz]', '</p><p align="justify">', $words[$i]);
}
//LINKSBÜNDIG
if (strpos($words[$i], '[left]')>=0)
{
$words[$i] = ereg_replace('[\left]', '<div align="left">', $words[$i]);
}
if (strpos($words[$i], '[/left]')>=0)
{
$words[$i] = ereg_replace('[/left]', '</div>', $words[$i]);
}
//rechtsbündig
if (strpos($words[$i], '[right]')>=0)
{
$words[$i] = ereg_replace('[\right]', '<div align="right">', $words[$i]);
}
if (strpos($words[$i], '[/right]')>=0)
{
$words[$i] = ereg_replace('[/right]', '</div>', $words[$i]);
}
//zentriert
if (strpos($words[$i], '[center]')>=0)
{
$words[$i] = ereg_replace('[\center]', '<div align="center">', $words[$i]);
}
if (strpos($words[$i], '[/center]')>=0)
{
$words[$i] = ereg_replace('[/center]', '</div>', $words[$i]);
}
//fett
if (strpos($words[$i], '[b]')>=0)
{
$words[$i] = ereg_replace('[\b]', '<b>', $words[$i]);
}
if (strpos($words[$i], '[/b]')>=0)
{
$words[$i] = ereg_replace('[/b]', '</b>', $words[$i]);
}
//kursiv
if (strpos($words[$i], '[k]')>=0)
{
$words[$i] = ereg_replace('[\k]', '<i>', $words[$i]);
}
if (strpos($words[$i], '[/k]')>=0)
{
$words[$i] = ereg_replace('[/k]', '</i>', $words[$i]);
}
// Ende Absätze
//LINKS
if (strpos($words[$i], '[url=')>=0)
{
$end_lenght=-(strpos($words[$i], '[/url]')-strpos($words[$i], ']'));
$start_url=strpos($words[$i], '[url=')+5;
$url_lenght=strpos($words[$i], ']')-strpos($words[$i], '[url=')-5;
$link_url=substr($words[$i],$start_url,$url_lenght);
$words[$i] = ereg_replace('[\url='.$link_url.']', '<a href="'.$link_url.'" target="_blanket">', $words[$i]);
//$words[$i] = ereg_replace('[/url=', '<a href="'.$link_url.'">LINK</a>', $words[$i]);
}
if (strpos($words[$i], '[/url]')>=0)
{
$words[$i] = ereg_replace('[/url]', '</a>', $words[$i]);
}
///ENDE LINKS
if (strlen($words[$i])>=$length && $email_found===false && $website_found===false)
{
#$words[$i] = chunk_split($words[$i], $length,"-<br>");
#$length = strlen($words[$i])-5;
#$words[$i] = substr($words[$i],0,$length);
}
$text = implode(" ",$words);
} //Ende For-Schleife
}
else
{
$text = chunk_split($text,$length,"-<br>");
}
return $text;
}
////Ich habe auch schon die ganzen ereg_replace()-Funktionen durch str_replace()-Funktionen ersetzt, ohne Ergebnis.