Probleme mit BBCodes
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
aufruf
beitrag
date
eintrag
email
ergebnis
fehler
funktion
galerie
jugend
jugendgruppe
limit
mach
order
parameter
quelltext
result
rufen
vorarbeiten
zeile
-
Hi,
ich habe eine Problem mit meinem Script.
Ich rufe so meine bbcodes Funktion auf:
include("bbcodes.php");
und so sieht es aus:
<?php function replacetags($eintrag) { while ((strpos($eintrag,"[url=http://")>-1) && (strpos($eintrag,"[/url]")>-1)) { $startpos=strpos($eintrag,"[url=http://")+5; $endpos=strpos($eintrag,"]",$startpos); $url=substr($eintrag,$startpos,$endpos-$startpos); $startpos=$endpos+1; $endpos=strpos($eintrag,"[/url]",$startpos); $urltext=substr($eintrag,$startpos,$endpos-$startpos); $codestring='[url=http://'.$url.']'.$urltext.'[/url]'; $eintragstring='<a href="'.$url.'">'.$urltext.'</a>'; $eintrag=str_replace($codestring,$eintragstring,$eintrag); } while ((strpos($eintrag,"[b]")>-1) && (strpos($eintrag,"[/b]")>-1)) { $startpos=strpos($eintrag,"[b]")+3; $endpos=strpos($eintrag,"[/b]",$startpos); $eintrag=substr($eintrag,$startpos,$endpos-$startpos); $codestring='[b]'.$eintrag.'[/b]'; $eintragstring='<b>'.$eintrag.'</b>'; $eintrag=str_replace($codestring,$eintragstring,$eintrag); } while ((strpos($eintrag,"[i]")>-1) && (strpos($eintrag,"[/i]")>-1)) { $startpos=strpos($eintrag,"[i]")+3; $endpos=strpos($eintrag,"[/i]",$startpos); $eintrag=substr($eintrag,$startpos,$endpos-$startpos); $codestring='[i]'.$eintrag.'[/i]'; $eintragstring='<i>'.$eintrag.'</i>'; $eintrag=str_replace($codestring,$eintragstring,$eintrag); } while ((strpos($eintrag,"[u]")>-1) && (strpos($eintrag,"[/u]")>-1)) { $startpos=strpos($eintrag,"[u]")+3; $endpos=strpos($eintrag,"[/u]",$startpos); $eintrag=substr($eintrag,$startpos,$endpos-$startpos); $codestring='[u]'.$eintrag.'[/u]'; $eintragstring='<u>'.$eintrag.'</u>'; $eintrag=str_replace($codestring,$eintragstring,$eintrag); } //mein erster versuch while ((strpos($eintrag,"[img]http://")>-1) && (strpos($eintrag,"[/img]")>-1)) { $startpos=strpos($eintrag,"[img]http://")+5; $endpos=strpos($eintrag,"[/img]",$startpos); $eintrag=substr($eintrag,$startpos,$endpos-$startpos); $codestring='[img]http://'.$eintrag.'[/img]'; $eintragstring='<img src="'.$eintrag.'" border="0" >'; $eintrag=str_replace($codestring,$eintragstring,$eintrag); } $eintrag = preg_replace("/\[img\](.*)\[\/img\]/isUe", "imagelink('\\1')", $eintrag); return $eintrag; } function imagelink($url) { $maxwidth = 400; $maxheight = 300; $imgsize = getimagesize($url); $imgsize = explode("\"", $imgsize[3]); $imgwidth = $imgsize[1]; $imgheight = $imgsize[3]; if ( ($imgwidth > $maxwidth) OR ($imgheight > $maxheight) ) { $t = true; $width = $maxwidth; $height = $maxheight; } if ($t == true) { $img_link = "<a href=\"".$url."\"><img src=\"" .$url ."\" style=\"width: ".$width."px; height: ".$height."px; \" /></a>"; } else { $img_link = "<img src=\"" .$url ."\" />"; } return $img_link; } ?>
Aber leider funktioniert es nicht...
Kann mri einer sagen warum? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
machs doch mit hilfe der funktion:
preg_replace
http://de.php.net/manual/de/function.preg-replace.php -
nein ich will es leiber mit der Funktion von mir machen
-
nein ich will es leiber mit der Funktion von mir machen
K?nntest du vllt sagen, was nicht geht?
Wird einfach kein BB-Code ersetzt oder wird gar nichts zur?ck gegeben etc.?
Au?erdem sag doch mal, was du schon alles ausprobiert hast! Schlie?lich kann man ja von dir erwarten, dass du dir wenigstens Gedanken ?ber m?gliche Fehlerquellen etc. machst.
MfG Lucas -
also es wird mir der PHP Code so wieder geben wi er eingeben wird.
Ich wei? nciht warum ich denke das die seite nicht richtig aufgerufen wird... -
wenn du die function aufrufen kannst dann wird die datei scho richtig eingebunden, denn sonst g?be es die function nicht... (Fatal error^^)
wenn der string 'unber?hrt' wieder ausgegeben wird.. bedeutet das, dass die whiles NIE wahr werden/sind und der code innen nicht ausgef?hrt wird.
wenn du bei der function bleiben willst... dann musst du dich schon zeile f?r zeile bis zum 'fehler' vorarbeiten.
und da du ich deiner function auch auf preg_replace str_repalce
'zur?ckgreifst'...
warum nicht per preg_mach(_all) suchen?
dann das was du da macht ist... ?hm... na ja^^ -
wie kann ich mit preg_replace meine bbcodes machen?
ich meine ohne soviel Code, geht es einfacher? -
fertiger code:
<?php
function html($string) {
$string = ereg_replace("\n", "<br>\n", $string);
$string = preg_replace("#\[ b\](.+?)\[ /b\]#is", "<b>\\1</b>", $string);
$string = preg_replace("#\[ i\](.+?)\[/ i\]#is", "<i>\\1</i>", $string);
$string = preg_replace("#\[ u\](.+?)\[/ u\]#is", "<u>\\1</u>", $string);
$string = preg_replace("#\[link\]www\.(.+?)\[/link\]#is", "<a href=\"http://www.\\1\" target=\"_blank\">www.\\1</a>", $string);
$string = preg_replace("#\[link\](.+?)\[/link\]#is", "<a href=\"\\1\" target=\"_blank\">\\1</a>", $string);
$string = preg_replace("#\[link=(.+?)\](.+?)\[/link\]#is", "<a href=\"\\1\" target=\"_blank\">\\2</a>", $string);
$string = preg_replace("#\[url\]www\.(.+?)\[/url\]#is", "<a href=\"http://www.\\1\" target=\"_blank\">www.\\1</a>", $string);
$string = preg_replace("#\[url\](.+?)\[/url\]#is", "<a href=\"\\1\" target=\"_blank\">\\1</a>", $string);
$string = preg_replace("#\[url=(.+?)\](.+?)\[/url\]#is", "<a href=\"\\1\" target=\"_blank\">\\2</a>", $string);
global $smiley_folder;
}
?>
Beitrag ge?ndert am 14.11.2005 20:09 von ruehrer -
und wie genau kann ich diese Funktion aufrufen?
-
warum probierst du es nicht mal so?
$post_text = htmlentities($post_text); $search[0] = '[ b]'; $replace[0] = '<b>'; $search[1] = '[/ b]'; $replace[1] = '</b>'; $search[2] = '[ u]'; $replace[2] = '<u>'; $search[3] = '[/ u]'; $replace[3] = '</u>'; $search[4] = '[ i]'; $replace[4] = '<i>'; $search[5] = '[/ i]'; $replace[5] = '</i>'; $search[30] = "[url='"; $replace[30] = "<a title='Externer Link! Betreten auf eigene Gefahr!' href='"; $search[31] = "']"; $replace[31] = "' target='_blank'>"; $search[32] = "[/url]"; $replace[32] = "</a>"; $post_text = str_replace($search, $replace, $post_text); $post_text = nl2br($post_text);
MfG
Kraeusi
Ps.:
newwarrior schrieb:
wenn cih deinen code anwenden sieht mein ergebnis so aus:
[b>i]
s d?rfte eigentlich maximal [b>b] erscheinen
edit: die [ u] und so ohne leerzeichen, lima interpretiert sie sonst!
Beitrag ge?ndert am 15.11.2005 05:44 von kraeusi -
habe ich alles gemacht und trotzdem wird mir jetzt von meinem Beitrag nur der erste Buchstabe ausgeben:
hier mal der Code von der ganzen Seite:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <meta http-equiv="Content-Language" content="de"> <meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Cache-Control" content="no-cache"> <meta name="Description" content="Jugendgruppe der EFG - Westerstede"> <meta name="Keywords" content="jesus baptiste glaube westerstede bund gott bible jugend jugendgruppe"> <meta name="author" content="Malte Kiefer"> <meta name="Title" content="Malte Kiefer"> <meta name="Publisher" content="Malte Kiefer"> <meta name="Copyright" content="Malte Kiefer."> <meta name="Revisit-after" content="1 Days"> <meta name="Audience" content="alle"> <meta name="Language" content="de"> <meta name="Generator" content="Gezaubert von Malte Kiefer."> <title>Jugendgruppe der EFG - Westerstede</title> <link rel="stylesheet" type="text/css" href="design/design.css"> </head> <body> <div id="main"> <div id="title" > <br><br><br><br> <br><br><br><br> <br> </div> <div id="left"> <div class="menu_title menu_rot menublock">Jugend</div> <div class="menu_blau menublock"> <a href="index.html" class='menuitem'>Startseite</a><br> <a href="news.html" class='menuitem'>News</a><br> <a href="termine.html" class='menuitem'>Termine</a><br> <a href="aktionen.html" class='menuitem'>Aktionen</a><br> <a href="mitarbeiter.html" class='menuitem'>Mitarbeiter</a><br> <a href="jugend.html" class='menuitem'>Jugend</a><br> </div> <div class="menu_title menu_rot menublock">Interaktiv</div> <div class="menu_orange2 menublock"> <a href="galerie.html" class='menuitem'>Galerien</a><br> <a href="gbook.php" class='menuitem'>G?stebuch</a><br> <a href="forum/forum.php" class='menuitem'>Forum</a><br> </div> <div class="menu_title menu_rot menublock">Infos</div> <div class="menu_orange menublock"> <a href="anfahrt.html" class='menuitem'>Anfahrt</a><br> <a href="links.html" class='menuitem'>Links</a><br> <a href="impressum.html" class='menuitem'>Impressum</a><br> </div> <p> <a href="http://www.validome.org/referer"> <img border="0" src="http://www.validome.org/images/set5/valid_html_4_0_1.gif" alt="Valid HTML 4.01" width="80" height="15"> </a> </p> </div> <div id="content"> <center><h2><i><u>G?stebuch</u></i></h2></center> <p align="right"><a href="new_entry.php"><b>Neuer Eintrag</b></a></p> <?php include ('verbindung.php'); include ('seiten_trenner.php'); $sql = "SELECT * FROM gbook ORDER BY date DESC LIMIT $start,$limit"; $result = mysql_query($sql) or die(mysql_error().'<br />Query: '.$sql); while ($read = mysql_fetch_array($result)) { $name[] = $read["name"]; $email[] = $read["email"]; $date[] = $read["date"]; $eintrag[] = $read["eintrag"]; } if (isset($eintrag)) { $eintrag = str_replace(":angry:", "<img border=\"0\" src=\"smilies/angry.gif\">", $eintrag); $eintrag = str_replace(":cool1:", "<img border=\"0\" src=\"smilies/cool1.gif\">", $eintrag); $eintrag = str_replace(":coolgun:", "<img border=\"0\" src=\"smilies/coolgun.gif\">", $eintrag); $eintrag = str_replace(":dozey:", "<img border=\"0\" src=\"smilies/dozey.gif\">", $eintrag); $eintrag = str_replace(":fuyou:", "<img border=\"0\" src=\"smilies/fuyou.gif\">", $eintrag); $eintrag = str_replace(":fuyou_2:", "<img border=\"0\" src=\"smilies/fuyou_2.gif\">", $eintrag); $eintrag = str_replace(":icon_cheesygrin:", "<img border=\"0\" src=\"smilies/icon_cheesygrin.gif\">", $eintrag); $eintrag = str_replace(":icon_confused:", "<img border=\"0\" src=\"smilies/icon_confused.gif\">", $eintrag); $eintrag = str_replace(":icon_eek:", "<img border=\"0\" src=\"smilies/icon_eek.gif\">", $eintrag); $eintrag = str_replace(":icon_lol:", "<img border=\"0\" src=\"smilies/icon_lol.gif\">", $eintrag); $eintrag = str_replace(":icon_neutral:", "<img border=\"0\" src=\"smilies/icon_neutral.gif\">", $eintrag); $eintrag = str_replace(":icon_redface:", "<img border=\"0\" src=\"smilies/icon_redface.gif\">", $eintrag); $eintrag = str_replace(":wallbash:", "<img border=\"0\" src=\"smilies/wallbash.gif\">", $eintrag); $eintrag = str_replace(":thumbup:", "<img border=\"0\" src=\"smilies/thumbup.gif\">", $eintrag); $search[0] = '[ b]'; $replace[0] = '<b>'; $search[1] = '[ /b]'; $replace[1] = '</b>'; $search[2] = '[ u]'; $replace[2] = '<u>'; $search[3] = '[/ u]'; $replace[3] = '</u>'; $search[4] = '[ i]'; $replace[4] = '<i>'; $search[5] = '[/ i]'; $replace[5] = '</i>'; $search[30] = "[url='"; $replace[30] = "<a title='Externer Link! Betreten auf eigene Gefahr!' href='"; $search[31] = "']"; $replace[31] = "' target='_blank'>"; $search[32] = "[/url]"; $replace[32] = "</a>"; $eintrag = str_replace($search, $replace, $eintrag); $eintrag = nl2br($eintrag); for ($i = 0; $i < count($eintrag); $i++) { ?> <table class="gbook" width="100%" > <tr> <td width="33%"> <i>Name:</i> <?php echo stripslashes(nl2br($name[$i])); ?></td> <td><i>Eintrag vom:</i> <?php echo date("d.m ; h:i",$date[$i]);?></td> </tr> </table> <table class="inhalt" width="100%"> <tr> <td width="100%"> <?php echo "<br>".stripslashes(nl2br($eintrag[$i]))."<br><br>"; ?> </td> </tr> </table> <br> <?php } include ('seiten.php'); } ?> <br><br> </div> <br style="clear:both;"> </div> </body> </html>
Beitrag ge?ndert am 15.11.2005 06:31 von newwarrior -
also es wird mir der PHP Code so wieder geben wi er eingeben wird.
Ich wei? nciht warum ich denke das die seite nicht richtig aufgerufen wird...
Du meinst HTML Code, oder?
Ok, jetzt wissen, wir was nicht geht.
kirschbluete schrieb:
[...]
wenn du bei der function bleiben willst... dann musst du dich schon zeile f?r zeile bis zum 'fehler' vorarbeiten.
[...]
Genau, am besten in jede zweite Zeile "print ( __LINE__ );" schreiben, dann siehst du, welche Zeilen nicht "benutzt" werden.
newwarrior schrieb:
und wie genau kann ich diese Funktion aufrufen?
Eine Funktion ruft man so auf :
$rueckgabewert = functionsname ( $parameter );
Das kann nat?rlich ein wenig varieren.
kraeusi schrieb:
warum probierst du es nicht mal so?
$post_text = htmlentities($post_text); $search[0] = '[ b]'; $replace[0] = '<b>'; $search[1] = '[/ b]'; $replace[1] = '</b>'; $search[2] = '[ u]'; $replace[2] = '<u>'; $search[3] = '[/ u]'; $replace[3] = '</u>'; $search[4] = '[ i]'; $replace[4] = '<i>'; $search[5] = '[/ i]'; $replace[5] = '</i>'; $search[30] = '[url=''; $replace[30] = '<a title='Externer Link! Betreten auf eigene Gefahr!' href=''; $search[31] = '']'; $replace[31] = '' target='_blank'>'; $search[32] = '[/url]'; $replace[32] = '</a>'; $post_text = str_replace($search, $replace, $post_text); $post_text = nl2br($post_text);
[...]
Ach kraeusi. -.-
Was passiert, wenn jemand "[ b]" eingibt? Also ohne das schlie?ende BB-Code-tag (wird "BB-Code" gro? oder klein geschrieben???).
@newwarrior :
Jetzt poste doch nicht den gesamten HTML Quelltext. -.-
Schneide das wichtigste raus, dann kann man dir viel schneller bzw. ?berhaupt helfen, denn ich habe keine Lust mir den Quelltext anzugucken.
Eine fertige BB-Code Funktion (gr??tenteils von mir) findest du hier :
http://wiki4you.de/index.php/BBCode:php
Sollten dort Fehler auftreten, dann m?sste es an dir liegen. :P
MfG Lucas
edit :
Das mit dem [ b] ohne das schlie?ende tag funtzt ja sogar hier. Oh man lord....
Beitrag ge?ndert am 15.11.2005 08:52 von lucas9991 -
ok Fehler gefunden,
Beitrag ge?ndert am 15.11.2005 10:55 von newwarrior
Wo liegt er denn?
Es w?re vllt auch f?r andere hilfreich, au?erdem k?nntest du dann auch den Code posten...
MfG Lucas -
Danke endlich geht alles
ich habe einen Fehler gemacht als ich deinen Code genommen habe. Jetzt geht es aber ich hatte einfach statt $ das geschrieben &
Beitrag ge?ndert am 15.11.2005 11:15 von newwarrior -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage