BBCode/Quote Problem
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anzeigen
argument
attribut
auftreten
ausgabe
automatischen zeilenumbruch
beispiel
beitrag
button
explorer
fehler
fehlermeldung
formular
funktion
muster
umbruch
variable
version
zeile
zeilenumbruch
-
hoi
ich habe ein problem...
und zwar, m?cht ich etwas quoten indem man auf den button des eintrags klickt und dann der text automatisch in das eingabefeld erscheint (eh wie fast ?berall ;) )
naja soweit so gut, das funktioniert ja auch schon halbwegs, allerdings nur solange kein zeilenumbruch drinnen ist :(
warum? keine ahnung!
hab jetzt schon versucht die < br /> durch / n zu ersetzen und vieles mehr, hab mir den quellcode von lima angesehen, habs aber irgendwie nicht anders :(
nunja ich bin am verzweifeln und wei? nicht mehr wo der fehler ist, vlt schau ich einfach nur dr?ber ??
die zeile in der gequotet wird:
$row[4] = str_replace("\"","\'",$row[4]);
<a on Click=\"document.eintragen.text.value = document.eintragen.text.value + '[ quote] ".$row[4]." [/ quote]'\">zit</a>
$row[4] ist der text der in der db steht also mit den bbcodes drinnen allerdings auch mit den < br /> die anscheinend irgendwie st?ren :(
ich hoffe jemand wei? weiter
mfg
Pointi
Beitrag ge?ndert am 17.11.2005 15:00 von pointi -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
kannst du mal den gesamten code posten?
-
kannst du mal den gesamten code posten?
n? denn der rest ist uninteressant, und au?erdem in diversen includes verpackt!
es geht mir ja nur ums r?berbringen in die textbox des textes
die angaben f?r die textbox stimmen ja, da es bei manchen texten geht nur wenn ein umbruch vorhanden ist dann eben nicht! -
versuch doch mal das <br /> durch \n zu ersetzen und nicht durch /n
//EDIT:
sry... aber ich kapier das net richtig...
der code w?rde mir weiterhelfen
//EDIT2:
du k?nntest mir den code an shandris@morefun.at schicken...
Beitrag ge?ndert am 16.11.2005 20:21 von shandris -
versuch doch mal das <br /> durch \n zu ersetzen und nicht durch /n
//EDIT:
sry... aber ich kapier das net richtig...
der code w?rde mir weiterhelfen
Beitrag ge?ndert am 16.11.2005 20:17 von shandris
Beitrag ge?ndert am 16.11.2005 20:19 von shandris
das oben ist ein tippfehler??
ich habs mit \ n ersetzen probiert ;)
also nochmal ;)
ich habe in der variable row[4] den text drinnen der aus der datenbank kommt und ausgegeben wird, beim ausgeben werden die bbcodes umgewandelt!
jedoch beim weitergeben f?rs zitieren wird der text so genommen wie er anfangs ist!#
jedoch sobald in diesem text ein umbruch (denk eben dass die < br /> schuld sind) geht der zitieren button nicht :(
ist zum beispiel nur "blabla" drinnen dann gehts!
ist aber ein quote mit br etc drinnen dann passiert nichts -
check doch mal den typ von dienem text, kann es ein das du druch die umbr?che nen array bekommst?
-
check doch mal den typ von dienem text, kann es ein das du druch die umbr?che nen array bekommst?
n? wieso einen array?
geb alles mit einer variable $text=bbCode($row[4]) aus!
und will dann $row[4] weitergeben an die textarea!
-
Gib doch mal den gesamten Quellcode bis zur Zeile 12 an. Manchmal bemerkt PHP den Fehler erst sp?ter -- nicht immer ist die angegebene Fehlerzeile auch die, in der der Fehler auftritt.
An den <br/>'s kann es ?brigens nicht liegen. Die Fehlermeldung sagt deutlich, dass es sich um einen Backslash handelt, der an einer Stelle auftritt, wo er nicht auftreten d?rfte. -
Gib doch mal den gesamten Quellcode bis zur Zeile 12 an. Manchmal bemerkt PHP den Fehler erst sp?ter -- nicht immer ist die angegebene Fehlerzeile auch die, in der der Fehler auftritt.
An den <br/>'s kann es ?brigens nicht liegen. Die Fehlermeldung sagt deutlich, dass es sich um einen Backslash handelt, der an einer Stelle auftritt, wo er nicht auftreten d?rfte.
die fehlermeldung was oben angezeigt wird ist nicht von mir die macht lima^^ -
Gib doch mal den gesamten Quellcode bis zur Zeile 12 an. Manchmal bemerkt PHP den Fehler erst sp?ter -- nicht immer ist die angegebene Fehlerzeile auch die, in der der Fehler auftritt.
An den <br/>'s kann es ?brigens nicht liegen. Die Fehlermeldung sagt deutlich, dass es sich um einen Backslash handelt, der an einer Stelle auftritt, wo er nicht auftreten d?rfte.
Oh, alopex. :D
@pointi, dann poste mal bitte den Quelltext ohne [ code ], dann k?nnen wir ihn auch sehen.
edit :
?ber Zitieren kann man den gesamten Post betrachten.
Also hier der Quelltext :
$row[4] = str_replace("\"","\'",$row[4]);
<a on Click=\"document.eintragen.text.value = document.eintragen.text.value + '[ quote] ".$row[4]." [/ quote]'\">zit</a>
MfG Lucas
Beitrag ge?ndert am 17.11.2005 13:32 von lucas9991 -
so werd mal versuchen den code irgendwie hierherzuschnippeln??
aalsoo:
1. text wird in db gespeichert durchlauft folgenden "bbcode-wandler"
$Argument = htmlentities($Argument);
$Argument = nl2br("$Argument");
$Argument = wordwrap($Argument, 100, "\n", 1);
so
2. text wird wieder ausgelesen dabei durchlauft er folgenden "bbcode-wandler"
$text = bbcod($row[X])
____________
$Argument = str_replace("[ b]","<b>",$Argument);
$Argument = str_replace("[ /b]","</b>",$Argument);
$Argument = str_replace("[ i]","<i>",$Argument);
$Argument = str_replace("[ /i]","</i>",$Argument);
$Argument = str_replace("[ u]","<u>",$Argument);
$Argument = str_replace("[ /u]","</u>",$Argument);
$Argument = str_replace("[center]","<center>",$Argument);
$Argument = str_replace("[/center]","</center>",$Argument);
$Argument = preg_replace("/\[code](.*?)\[\/code\]/si","<pre>\\1</pre>", $Argument);
$Argument = preg_replace("/\[url](.*?)\[\/url\]/si", "<a class=\"link\" \"\\1\" href=\"\\1\" target=\"_blank\">\\1</a>", $Argument);
$Argument = preg_replace("/\[url=(.*?)\](.*)\[\/url\]/si", "<a class=\"link\" \"\\1\" href=\"\\1\" target=\"_blank\">\\2</a>", $Argument);
while (preg_match("#\[quote\](.*?)\[\/quote\]#si", $Argument))
{
$Argument = preg_replace("#\[quote\](.*?)\[\/quote\]#si", "<table class=\"tabelle\"><tr><td class='quote'>$1</td></tr></table>\n", $Argument);
}
_____________
so,
3. die die variable $text wird ausgegeben und ist sichtbar!
jetzt hab ich noch einen button zum zitieren:
<a on Click=\"document.eintragen.text.value = document.eintragen.text.value + '[ quote] ".$row[4]." [/ quote]'\">zit</a>
vor diesem mach ich aber noch:
$row[4] = str_replace("\"","\'",$row[4]);
um die " zu entfernen die mir das ergebnis versauen??
4. es sollte der text im textfeld erscheinen nach einem klick, tut er aber nicht immer nur wenn kein umbruch im text ist (so ist es mir zumindest aufgefallen!)
ich hoffe es kennt sich nun (endlich??) jeder aus
hab vielleicht ein wenig verwirrend erkl?rt zu anfangs, naja ich hoff jetzt is einigerma?en klar!
mfg
Pointi
Beitrag ge?ndert am 17.11.2005 20:09 von pointi -
da sich mein problem noch immer nicht gel?st hat muss ich wohl zu spam greifen so leids mir tut :-/ aber einen neuen thread aufmachen ist ja auch bl?d
*schieb*
ich hoffe mir kann noch jemand helfen!!! -
Folgendes Zitat stammt aus SelfHTML:
Mit dem nicht-standardisierten Attribut wrap k?nnen Sie den Zeilenumbruch steuern (wrap = Umbruch). Die folgenden Angaben sind "ohne Gew?hr":
wrap="soft" wird von Netscape 4.x interpretiert und bewirkt automatischen Zeilenumbruch bei der Anzeige. Beim Absenden des Formulars werden an Stellen, wo der Text umbrochen ist, jedoch keine Zeilenumbruch-Zeichen ?bertragen.
wrap="hard" wird von Netscape 4.x interpretiert und bewirkt automatischen Zeilenumbruch bei der Anzeige. Beim Absenden des Formulars werden die Zeilenumbruch-Zeichen an Stellen, wo der Text automatisch umbrochen ist, ?bertragen.
wrap="virtual" wird vom Internet Explorer ab Version 4.x und den Netscape-Versionen 2.x und 3.x interpretiert und ist gleichbedeutend mit wrap="soft".
wrap="physical" wird vom Internet Explorer ab Version 4.x und den Netscape-Versionen 2.x und 3.x interpretiert und ist gleichbedeutend mit wrap="hard".
wrap="off" wird vom Internet Explorer ab Version 4.x, Opera ab Version 7, Netscape, Konqueror und Firefox interpretiert und ist gleichbedeutend mit der Voreinstellung von Netscape bis einschlie?lich Version 4.x - n?mlich keinen Text automatisch umzubrechen.
Demnach liegt der Fehler mit den fehlenden zeilenumbr?chen nciht in deinem BBCode-Umwandler, sondern in der Art und Weise, wie der Text aus dem Eingabefeld ?bergeben wird.
Mit dem Attribut wrap=physical sollte es also meiner Meinung nach funktionieren.
Gru?
ssd
?dit: das Attribut geh?rt in den Textarea-Tag im Aingabeformular!!!!!!
Beitrag ge?ndert am 2.12.2005 18:28 von ssd_bonn -
Folgendes Zitat stammt aus SelfHTML:
Mit dem nicht-standardisierten Attribut wrap k?nnen Sie den Zeilenumbruch steuern (wrap = Umbruch). Die folgenden Angaben sind "ohne Gew?hr":
wrap="soft" wird von Netscape 4.x interpretiert und bewirkt automatischen Zeilenumbruch bei der Anzeige. Beim Absenden des Formulars werden an Stellen, wo der Text umbrochen ist, jedoch keine Zeilenumbruch-Zeichen ?bertragen.
wrap="hard" wird von Netscape 4.x interpretiert und bewirkt automatischen Zeilenumbruch bei der Anzeige. Beim Absenden des Formulars werden die Zeilenumbruch-Zeichen an Stellen, wo der Text automatisch umbrochen ist, ?bertragen.
wrap="virtual" wird vom Internet Explorer ab Version 4.x und den Netscape-Versionen 2.x und 3.x interpretiert und ist gleichbedeutend mit wrap="soft".
wrap="physical" wird vom Internet Explorer ab Version 4.x und den Netscape-Versionen 2.x und 3.x interpretiert und ist gleichbedeutend mit wrap="hard".
wrap="off" wird vom Internet Explorer ab Version 4.x, Opera ab Version 7, Netscape, Konqueror und Firefox interpretiert und ist gleichbedeutend mit der Voreinstellung von Netscape bis einschlie?lich Version 4.x - n?mlich keinen Text automatisch umzubrechen.
Demnach liegt der Fehler mit den fehlenden zeilenumbr?chen nciht in deinem BBCode-Umwandler, sondern in der Art und Weise, wie der Text aus dem Eingabefeld ?bergeben wird.
Mit dem Attribut wrap=physical sollte es also meiner Meinung nach funktionieren.
Gru?
ssd
?dit: das Attribut geh?rt in den Textarea-Tag im Aingabeformular!!!!!!
Beitrag ge?ndert am 2.12.2005 18:28 von ssd_bonn
n?, funktioniert auch nicht :-/
immer noch das selbe prob sobald ein umbruch im text ist funzt es nichtmehr
das wrap bricht ja nur zu lange w?rter ab, die hab ich auch gar nicht verwendet also wurde auch kein umbruch eingef?gt ging ja trotzdem nicht :(
trotzdem danke f?r die anregung! h?tt ja sein k?nnen.
mfg
Pointi -
Pointi benutz doch einfach folgende Funktion :
http://wiki4you.de/index.php/BBCode:php
function bbcode ($bbcode) { if (is_array ($bbcode)) { // Pr?fen, ob der Parameter ein Array ist foreach ($bbcode as $key => $value) { // wenn ja, Wert und Inhalt auslesen und diese Funktion mit dem Inhalt als Parameter wieder aufrufen $bbcode[$key] = bbcode ($value); } } else { // wenn der ?bergebene Parameter kein Array ist $bbcode = stripslashes ($bbcode); // ?berfl?ssige Backslahes entfernen $muster = array (); $ersetzten = array (); $muster[] = "/&/Ui"; $ersetzen[] = '&'; $muster[] = "/</Ui"; $ersetzen[] = '<'; $muster[] = "/>/Ui"; $ersetzen[] = '>'; $muster[] = "/\"/Ui"; $ersetzen[] = '"'; $muster[] = "/\[br\]/Ui"; $ersetzen[] = '<br />'; $muster[] = "/\[hr\]/Ui"; $ersetzen[] = '<hr />'; $muster[] = "/\[b\](.*)\[\/b\]/Ui"; $ersetzen[] = '<span class="b">\1</span>'; $muster[] = "/\[u\](.*)\[\/u\]/Ui"; $ersetzen[] = '<span class="u">\1</span>'; $muster[] = "/\[i\](.*)\[\/i\]/Ui"; $ersetzen[] = '<span class="i">\1</span>'; $muster[] = "/\[h1\](.*)\[\/h1\]/Ui"; $ersetzen[] = '<h1>\1</h1>'; $muster[] = "/\[h2\](.*)\[\/h2\]/Ui"; $ersetzen[] = '<h2>\1</h2>'; $muster[] = "/\[h3\](.*)\[\/h3\]/Ui"; $ersetzen[] = '<h3>\1</h3>'; $muster[] = "/\[h4\](.*)\[\/h4\]/Ui"; $ersetzen[] = '<h4>\1</h4>'; $muster[] = "/\[h5\](.*)\[\/h5\]/Ui"; $ersetzen[] = '<h5>\1</h5>'; $muster[] = "/\[h6\](.*)\[\/h6\]/Ui"; $ersetzen[] = '<h6>\1</h6>'; $muster[] = "/\[quote\](.*)\[\/quote\]/Ui"; $ersetzen[] = '<div class="quote">Zitat: <br \>\1</div>'; $muster[] = '/\[url=(.*)\](.*)\[\/url\]/Ui'; $ersetzen[] = '<a href="\1" target="_blank">\2</a>'; $muster[] = "/\[url\](.*)\[\/url\]/Ui"; $ersetzen[] = '<a href="\1" target="_blank">\1</a>'; $muster[] = "/\[img\](.*)\[\/img\]/Ui"; $ersetzen[] = '<img src="\1" border="0" />'; $muster[] = "/\[li\](.*)\[\/li\]/Ui"; $ersetzen[] = '<li>1</li>'; $muster[] = "/\[ul\](.*)\[\/ul\]/Ui"; $ersetzen[] = '<ul>1</ul>'; $muster[] = "/\[php\](.*?)\[\/php\]/Ui"; $ersetzen[] = '<blockquote><div class="pre">PHP-Code:<br>\1<hr noshade></div></blockquote>'; $muster[] = "/\[code\](.*)\[\/code\]/Ui"; $ersetzen[] = '<blockquote><div class="pre">Code:<br>\1<hr noshade></div></blockquote>'; $muster[] = "/\[pre\](.*)\[\/pre\]/Ui"; $ersetzen[] = '<div class="pre">\1</div>'; $bbcode = eregi_replace ("http://www.", "www.", $bbcode); $bbcode = eregi_replace ("www.", "http://www.", $bbcode); $bbcode = preg_replace ($muster, $ersetzen, $bbcode); $bbcode = preg_replace ("#(^|[^\"=]{1})(http://|ftp://|mailto:|https://)([^\s<>]+)([\s\n<>]|$)#sm","\\1<a target=\"_blank\" href=\"\\2\\3\">\\3</a>\\4",$bbcode); $bbcode = nl2br ($bbcode); } return $bbcode; // das ganze zur?ckgeben }
MfG Lucas -
ok wei? jetzt warums ned funktioniert hat, hatte den bbcode gesplittet, teil beim hinein in die db teil beim heraus, mit dem neuen code gehts jetzt,
allerdings hab ich jetzt noch ein anderes problem, und zwar kann ich jetzt nicht mehr 2 quotes ineinander machen!
hatte ich ja vorher mit ner while schleife gemacht, jetzt gehts nicht mehr :(
wei? da nochjemand weiter? habs auch beim neuen mit der while probiert funzt aber ned wirklich!
mfg
Pointi -
M?sste eingetlich gehen.
Poste doch mal den Input, dann kann man dir vllt besser helfen
MfG Lucas -
w?sst jetzt zwar nicht was da am input falsch sein k?nnte aber gut ;)
ich hoff du hast mit input das hier gemein:
$sql = "INSERT INTO comments VALUES('$comments','$namedb','$heute','$zeit','$text','$homepage','$email','$icq','$ip')" or die ("geht ned");
die variable $text wird nicht mehr "behandelt" kommt direkt vom textfeld!
schaus dir am besten schnell an, habs grad probiert:
http://www.fadisation.at
-
Man wandelt den BB-Code eingetlich erst nach dem Auslesen um. Das ist praktischer, da man dann so den BB-Code beim Bearbeiten sieht und nicht den fertigen HTML Code(der dann ja auch wieder entwertet wird).
Ich meinte den Input, den du in die Funktion eingibst, also den Text mit dem BB-Code.
MfG Lucas -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage