BBcode?

  • Themenstarter Themenstarter McNiko
  • Beginndatum Beginndatum
M

McNiko

Hallo, ich habe ein paar fragen zu BBcode und der Smiley einbindung: Ich habe es bisher immer so gemacht, aber das ist ja kein richtiger BBcode oder? Und es funktioniert auch nur der Zeilenumbruch:

PHP:
<?

# Verbindung
include("verbindung.php");

# SQL Code
$szMySQL = "SELECT * FROM news ORDER BY NewsID DESC";
$sqlErgebnis = mysql_query($szMySQL);

# Ausgabe
while($sqlRowMySQL = mysql_fetch_object($sqlErgebnis))
{

$row->Text = ereg_replace("(\r\n|\n|\r)", "<br>", $row->Text);      
$row->Text = ereg_replace("(.*)", "<b>(.*)</b>", $row->Text); 

echo ('  '.$sqlRowMySQL->Text.' ');

}

?>

...wie mache ich es also richtig und wie kann ich verhindern das eine HTML Datei angezeigt wird?

danke

mfg
 
Zuletzt bearbeitet von einem Moderator:
Hi schau dir mal die Funktion an vllt. hilft dir das ja weiter, habe gerade keine Zeit umsie ausführlich zu erklären.

PHP:
<?php
function bbcode2html($text){
  $text = preg_replace("#\[s\](.*?)\[/s\]#si", '<strong>\\1</strong>', $text);
  $text = preg_replace("#\[k\](.*?)\[/k\]#si", '<i>\\1</i>', $text);
  $text = preg_replace("#\[b\](.*?)\[/b\]#si", '<b>\\1</b>', $text);
  $text = preg_replace("#\[u\](.*?)\[/u\]#si", '<u>\\1</u>', $text);
  $text = preg_replace("#\[link\](.*?)\[/link\]#si", '<a href=\'\\1\' target=\"_blank\">link</a>', $text);
  return $text;
} 
?>
 
@tobee: Ich meine wenn einer eine html datei in einem beitrag postet, wird er auch so ausgegeben, das kann viel kaputt machen, wie kann ich dieses verhindern?

Zurück zum Thema: Also müsste es so gehen?

PHP:
<?

# Verbindung
include("verbindung.php");

# SQL Code
$szMySQL = "SELECT * FROM news ORDER BY NewsID DESC";
$sqlErgebnis = mysql_query($szMySQL);

# Ausgabe
while($sqlRowMySQL = mysql_fetch_object($sqlErgebnis))
{

function bbcode2html($sqlRowMySQL->Text){
  $sqlRowMySQL->Text = preg_replace("#\[s\](.*?)\[/s\]#si", '<strong>\\1</strong>', $sqlRowMySQL->Text);
  $sqlRowMySQL->Text = preg_replace("#\[k\](.*?)\[/k\]#si", '<i>\\1</i>', $sqlRowMySQL->Text);
  $sqlRowMySQL->Text = preg_replace("#\[b\](.*?)\[/b\]#si", '<b>\\1</b>', $sqlRowMySQL->Text);
  $sqlRowMySQL->Text = preg_replace("#\[u\](.*?)\[/u\]#si", '<u>\\1</u>', $sqlRowMySQL->Text);
  $sqlRowMySQL->Text = preg_replace("#\[link\](.*?)\[/link\]#si", '<a href=\'\\1\' target=\"_blank\">link</a>', $sqlRowMySQL->Text);
  return $sqlRowMySQL->Text;
} 

echo ('  '.$sqlRowMySQL->Text.' ');

}

?>

mfg
.....
 
Entfernen des HTML Codes kannst du z. B. mit [phpf]strip_tags[/phpf] machen, falls du aber willst, dass der Code trotzdem bestehen bleibt, solltest du [phpf]htmlspecialchars[/phpf] benutzen.

Ansonsten hier mal meine kleine BBCode Funktion... Ist noch im Aufbau.

PHP:
public function bbCode($text) {
			// HTML Entities
			$text = htmlentities($text);
			// Bold
			$text = str_replace("[ b ]", "<b>", $text);
			$text = str_replace("[ /b ]", "</b>", $text);
			// Italic
			$text = str_replace("[ i ]", "<i>", $text);
			$text = str_replace("[ /i ]", "</i>", $text);
			// Underline
			$text = str_replace("[ u ]", "<u>", $text);
			$text = str_replace("[ /u ]", "</u>", $text);
			// URLs
			$url_pattern[] = "#\[url\]((www)\.([\w\#$%&~/.\-;:=,?@\]+]+|\[(?!url=))*?)\[/url\]#is";
			$url_replacement[] = "<a href=\"http://$1\">$1</a>";
			$url_pattern[] = "#\[url\]([\w]+?://([\w\#$%&~/.\-;:=,?@\]+]+|\[(?!url=))*?)\[/url\]#is";
			$url_replacement[] = "<a href=\"$1\">$1</a>";
			$url_pattern[] = "#\[ url=([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is"; 
			$url_replacement[] = "<a href=\"$1\">$2</a>";
			$url_pattern[] = "#\[ url=((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is"; 
			$url_replacement[] = "<a href=\"http://$1\">$3</a>";
			$text = preg_replace($url_pattern, $url_replacement, $text);
			
			// LineBreaks
			$text = nl2br($text);
			return $text;
	}
 
@tobee: Ich meine wenn einer eine html datei in einem beitrag postet, wird er auch so ausgegeben, das kann viel kaputt machen, wie kann ich dieses verhindern?

Zurück zum Thema: Also müsste es so gehen?

PHP:
<?

# Verbindung
include("verbindung.php");

# SQL Code
$szMySQL = "SELECT * FROM news ORDER BY NewsID DESC";
$sqlErgebnis = mysql_query($szMySQL);

# Ausgabe
while($sqlRowMySQL = mysql_fetch_object($sqlErgebnis))
{

function bbcode2html($sqlRowMySQL->Text){
  $sqlRowMySQL->Text = preg_replace("#\[s\](.*?)\[/s\]#si", '<strong>\\1</strong>', $sqlRowMySQL->Text);
  $sqlRowMySQL->Text = preg_replace("#\[k\](.*?)\[/k\]#si", '<i>\\1</i>', $sqlRowMySQL->Text);
  $sqlRowMySQL->Text = preg_replace("#\[b\](.*?)\[/b\]#si", '<b>\\1</b>', $sqlRowMySQL->Text);
  $sqlRowMySQL->Text = preg_replace("#\[u\](.*?)\[/u\]#si", '<u>\\1</u>', $sqlRowMySQL->Text);
  $sqlRowMySQL->Text = preg_replace("#\[link\](.*?)\[/link\]#si", '<a href=\'\\1\' target=\"_blank\">link</a>', $sqlRowMySQL->Text);
  return $sqlRowMySQL->Text;
} 

echo ('  '.$sqlRowMySQL->Text.' ');

}

?>

mfg


Nein, so:

PHP:
<?php
function bbcode2html($Text){
  $sqlRowMySQL->Text = preg_replace("#\[s\](.*?)\[/s\]#si", '<strong>\\1</strong>', $Text);
  $sqlRowMySQL->Text = preg_replace("#\[k\](.*?)\[/k\]#si", '<i>\\1</i>', $Text);
  $sqlRowMySQL->Text = preg_replace("#\[b\](.*?)\[/b\]#si", '<b>\\1</b>', $Text);
  $sqlRowMySQL->Text = preg_replace("#\[u\](.*?)\[/u\]#si", '<u>\\1</u>', $Text);
  $sqlRowMySQL->Text = preg_replace("#\[link\](.*?)\[/link\]#si", '<a href=\'\\1\' target=\"_blank\">link</a>', $Text);
  return $Text;
} 

# Verbindung
include("verbindung.php");

# SQL Code
$szMySQL = "SELECT * FROM news ORDER BY NewsID DESC";
$sqlErgebnis = mysql_query($szMySQL);

# Ausgabe
while($sqlRowMySQL = mysql_fetch_object($sqlErgebnis))
{

echo bbcode2html($sqlRowMySQL->Text);
}

?>

Es wird aus erstes ne neue Funktion erstellt, diese wir dan immer angewendet.
MfG Sturm
 
Also hier klappt es schonmal:

PHP:
<?php

function bbcode2html($Text){
  $Text = preg_replace("#\[s\](.*?)\[/s\]#si", '<strong>\\1</strong>', $Text);
  $Text = preg_replace("#\[k\](.*?)\[/k\]#si", '<i>\\1</i>', $Text);
  $Text = preg_replace("#\[b\](.*?)\[/b\]#si", '<b>\\1</b>', $Text);
  $Text = preg_replace("#\[u\](.*?)\[/u\]#si", '<u>\\1</u>', $Text);
  $Text = preg_replace("#\[link\](.*?)\[/link\]#si", '<a href=\'\\1\' target=\"_blank\">link</a>', $Text);
  return $Text;
} 

# Verbindung
include("verbindung.php");

# SQL Code
$szMySQL = "SELECT * FROM news ORDER BY NewsID DESC";
$sqlErgebnis = mysql_query($szMySQL);

# Ausgabe
while($sqlRowMySQL = mysql_fetch_object($sqlErgebnis))
{

echo bbcode2html($sqlRowMySQL->Text);
}

?>

...aber wo muss ich es hier einbauen? So klappt es nicht:

PHP:
<?

function bbcode2html($Text){
  $Text = preg_replace("#\[s\](.*?)\[/s\]#si", '<strong>\\1</strong>', $Text);
  $Text = preg_replace("#\[k\](.*?)\[/k\]#si", '<i>\\1</i>', $Text);
  $Text = preg_replace("#\[b\](.*?)\[/b\]#si", '<b>\\1</b>', $Text);
  $Text = preg_replace("#\[u\](.*?)\[/u\]#si", '<u>\\1</u>', $Text);
  $Text = preg_replace("#\[link\](.*?)\[/link\]#si", '<a href=\'\\1\' target=\"_blank\">link</a>', $Text);
  return $Text;
}

$seite = $_GET["seite"];  

if(!isset($seite))
   {
   $seite = 1;
   }

# Verbindung
include ('verbindung.php');

$eintraege_pro_seite = 5;

$start = $seite * $eintraege_pro_seite - $eintraege_pro_seite;

# SQL Code
$szMySQL = "SELECT * FROM news ORDER BY NewsID DESC LIMIT $start, $eintraege_pro_seite";
$sqlErgebnis = mysql_query($szMySQL);
$ergebnis = mysql_query($abfrage);
    {
   echo $row->id.""; 
   }
   
$result = mysql_query("SELECT NewsID FROM news");
$menge = mysql_num_rows($result);

$wieviel_seiten = $menge / $eintraege_pro_seite;


# Ausgabe
while($sqlRowMySQL = mysql_fetch_object($sqlErgebnis))
{

   echo (''.$sqlRowMySQL->Text.'');

}

echo " Seite ";

for($a=0; $a < $wieviel_seiten; $a++)
   {
   $b = $a + 1;

   if($seite == $b)
      {


      echo "<b>$b</b> ";
      }

   else
      {
      echo "<a href=\"?seite=$b\">$b</a> ";

      }

   }

?>

mfg
 
Ok, du erstelltst eine Funktion, die hast du schon. jetzt muss sie aber noch irgendwo aufgerufen werden.
echo (''.$sqlRowMySQL->Text.'');
Hier werden die daten von der Datenbank ausgegeben, ohne sie zu verformen (*keine Ahnung hat wie mans beschreiben soll*)
$news = bbcode2html($sqlRowMySQL->Text);
echo $news;
Da werden die Daten aus der Datenbank erst verformt,und dan ausgegeben.
 
Danke, klappt alles wunderbar...jetzt müsste ich nurnoch wissen wie ich diese Buttons mache wo man drauf klickt und es kommt im Textfeld


danke

mfg
 
Zurück