BBCode Problem mit URL und EMAIL

Oli-bt

Mitglied
Hi zusammen!
Ich habe folgendes JavaScript für mein "Forum" geschrieben damit man BBCode in ein Textfeld einfügen kann:
Code:
function bbcode(atag, etag) 
    { 
    var text = prompt("Bitte gebe den Text ein den Du formatieren willst:",""); 

    document.formular.nachricht.focus(); 
    var value = document.formular.nachricht.value; 
    document.formular.nachricht.value = value + atag + text +etag; 
    document.formular.nachricht.focus(); 
    }
Das funktioniert so allerdings nur bei dem Fett, Kusiv, Unterstrichen und Bild "Tag"....

Denn später wandle ich die Strings mit PHP wie folgt um:
Code:
$text = str_replace("[b ]", "<b >", $text);
$text = str_replace("[/b ]", "</b >", $text);

Wie mache ich das jetzt aber bei [email ] und bei [url ]
Da kommen doch in anderen Foren immer 2 "Prompt" fenster und man kann im ersten Optional nen Text eingeben....
Und wie mache ich das dann das a) die Adresse im Tag steht, und b) der Text nochmal später dort steht...?!

Wäre super wenn mir jemand weiterhelfen kann.

Gruß, Oli
 
Etwa so:
PHP:
$text = str_replace("[ url]", "<a  href='".$strLink."'>".$strLink."</a>", $text);
$text = str_replace("[ /url]", "</a>", $text);

und
PHP:
$text = str_replace("[ email]", "<a  href='mailto:".$strMail."'>".$strMail."</a>", $text);
$text = str_replace("[ /email]", "</a>", $text);

Wenn ich dich richtig verstanden habe.
 
Ja, ich glaube das passt. Und woher nehme ich am besten, bzw wo muss ich die Veriablen festlegen? also die Veriable Email und die Veriable Link?
 
Du wirst irgendetwas in der Richtung haben.

HTML:
<fom action="eintragen.php" method="post">
<textarea name="text"></textarea>
<input type="submit">
</form>

PHP:
$text = $_POST['text'];
for($nI=0; $nI<=str_word_count($_POST['text']); $nI++) {
  $arrText = explode("[ URL]", $text);
  $arrURL = explode("[ /URL]", $arrText[1]);
  $strLink = $arrURL[0];
  $text = str_replace("[ url]", "<a  href='".$strLink."'>".$strLink."</a>", $text);
  $text = str_replace("[ /url]", "</a>", $text);

  $arrText = explode("[ email]", $text);
  $arrMail = explode("[ /email]", $arrText[1]);
  $strMail = $arrMail[0];
  $text = str_replace("[ email]", "<a  href='mailto:".$strMail."'>".$strMail."</a>", $text); 
  $text = str_replace("[ /email]", "</a>", $text);
}

Hab es leider noch nicht getestet aber sollte funktionieren.
 
hm.... also ich hab das bei mir so gemacht:

Code:
function bbcode(atag, etag) 
    { 
    var text = prompt("Bitte gebe den Text ein den Du formatieren willst:",""); 

    document.formular.nachricht.focus(); 
    var value = document.formular.nachricht.value; 
    document.formular.nachricht.value = value + atag + text +etag; 
    document.formular.nachricht.focus(); 
    }
und die das mit dem Formular passt so wie du es geschrieben hast.

Allerdings wandle ich den BBCode erst beim auslesen folgendermaßen um:
Code:
$text = str_replace("[b ]", "<b >", $text);
$text = str_replace("[/b ]", "</b >", $text);
$text = str_replace("[i ]", "<i >", $text);
$text = str_replace("[/i ]", "</i >", $text);
$text = str_replace("[u ]", "<u >", $text);
$text = str_replace("[/u ]", "</u >", $text);
$text = str_replace("[img ]", "<img src='", $text);
$text = str_replace("[/img ]", "' >", $text);
 
so wie ich das sehe würdest du das ja schon beim Speichern in die Datenbank umschreiben.
Ich wollte es eigentlich erst wenn es gelesen wird umwandeln. Damit der User auch beim Bearbeiten den BBCode sieht.

Weist du was ich meine? Sorry.... immer diese Newbies ;)
 
Ja ich glaube ich weis was du meinst.

Dann ersetzt du einfach "$_POST['text']" durch den Text der in der Datenbank abgelegt ist irgendwie "$arrResult->message" oder so.

$_POST['text'] ist einfach der Übergabewert ob er jetzt von der Datenbank kommt oder vom Formular sollte eigentlich keine Rolle spielen.
 
Böser, böser Fehler das.

PHP:
$text = $arrResult->message;

for($nI=0; $nI<=str_word_count($text); $nI++) {
	$arrText = explode("[ URL]", $text);
	$arrURL = explode("[ /URL]", $arrText[1]);
	$strLink = $arrURL[0];
	$text = str_replace("[ URL]", "<a href='".$strLink."'>", $text);
	$text = str_replace("[/ URL]", "</a>", $text);

	$arrText = explode("[ email]", $text);
	$arrMail = explode("[ /email]", $arrText[1]);
	$strMail = $arrMail[0];
	$text = str_replace("[ email]", "<a href='mailto:".$strMail."'>", $text);
	$text = str_replace("[ /email]", "</a>", $text);
}
 
Zurück