WinFuture-Forum.de: Bbcode - Smilieproblem - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
  • 2 Seiten +
  • 1
  • 2

Bbcode - Smilieproblem TextBBcode funktioniert, nun kommen die Smilies


#1 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 26. Juli 2008 - 15:52

Habe noch ein Problem mit den Smilies die ich benutzen wollte
$fin=str_replace("\n", '
   ', htmlentities($row->text));
	   // BBCode Replacen
	   $fin = preg_replace('/\[b\](.*?)\[\/b\]/', '<b>$1</b>', $fin); // Fett
	   $fin = preg_replace('/\[u\](.*?)\[\/u\]/', '<u>$1</u>', $fin); // Underline
	   $fin = preg_replace('/\[i\](.*?)\[\/i\]/', '<i>$1</i>', $fin); // Italic
	   $fin = preg_replace('/\[img\](.*?)\[\/img\]/', '<img src="$1">', $fin); // Img
	   $fin = preg_replace('/\[link\](.*?)\[\/link\]/', '<a href="$1">$1</a>', $fin); // Link
	   //Smilies
	   function rep($var) {
	   str_replace(":","",$var);
	   }
	   *$fin = preg_replace('/\[:grin\](.*?)\[\/big:\]/', '<img src="smilies/'rep($1);'.gif">', $fin); 
	   
	   //Ende BBCode Replacen

Es funktioniert alles super bis zur zeile mit dem Stern*!

Der BBCode dazu ist :grinbig:!

Ich muss mit der Funktion rep($var); die doppelpunkte löschen damit ich den BBCode zu dem Smilie umwandeln kann der da heißt grinbig.gif!

Also von :grinbig: zu grinbig und am ende zu <img src="smilies/grinbig.gif">

Weiß jemand Rat? :(
0

Anzeige



#2 Mitglied ist offline   [Elite-|-Killer] 

  • Gruppe: aktive Mitglieder
  • Beiträge: 762
  • Beigetreten: 02. Oktober 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Passau

geschrieben 26. Juli 2008 - 19:11

a) Fett heist Bold
b) link ist normal url
c) wieso nicht einfach
$fin = preg_replace('/:grinbig:/', '<img src="/smilies_oder_was_auch_immer/grinbig.png" alt="Smilie #1" />', $fin);?

Dieser Beitrag wurde von [Elite-|-Killer] bearbeitet: 26. Juli 2008 - 19:11

0

#3 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 26. Juli 2008 - 19:22

Zitat

a) Fett heist Bold
b) link ist normal url


Stimmt muss ich noch anpassen, lege ich aber im moment keinen Wert drauf

Zitat

c) wieso nicht einfach

Ja, nur es geht nicht!

function rep($sm){
	$fin = preg_replace('/:'.$sm.':/', '<img src="/smilies/'.$sm.'.gif" alt="'.$sm.'" />', $fin);
	};
rep("grinbig");


Doch es passiert nichts!
Er ersetzt nichts sowohl mit str_replace als auch mit preg_replace!

Dieser Beitrag wurde von Toasterfraktion bearbeitet: 26. Juli 2008 - 19:48

0

#4 Mitglied ist offline   [Elite-|-Killer] 

  • Gruppe: aktive Mitglieder
  • Beiträge: 762
  • Beigetreten: 02. Oktober 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Passau

geschrieben 26. Juli 2008 - 20:03

Doch macht es. Du hast nur einen Fehler in der Variable denke ich, da du
a) $fin nicht definierst und
b) $fin nicht zurückgibst oder der Gleichen
0

#5 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 26. Juli 2008 - 20:11

Das kommt normalerweise später. in der while-Schleife

So heir mal der betreffende Teil meines Codes:
<?php
$abfrage = "SELECT * FROM xy WHERE status=1 ORDER BY tag DESC LIMIT $start, $eintraege_pro_seite";
$ergebnis = mysql_query($abfrage);

// Smilie Funktion
function rep($sm){
	$fin = preg_replace('/:'.$sm.':/', '<img src="/smilies/'.$sm.'.gif" alt="'.$sm.'" />', $fin);
	};
	

while($row = mysql_fetch_object($ergebnis))
	{

	$words = str_word_count($row->text);
	$fin=str_replace("\n", '<br>', htmlentities($row->text));
	// BBCode Replacen
	$fin = preg_replace('/\[b\](.*?)\[\/b\]/', '<b>$1</b>', $fin); // Fett
	//usw....
	//smilies
	rep("grinbig");

// Hier wird alles ausgegeben
	$chars = strlen(str_replace(array(' ',"\n", "\r", "\t", "\o"), '', strip_tags(trim($row->text))));
	echo '
	<div class="news">
	<span class="day"><a name="tag'.$row->tag.'"></a>Tag '.$row->tag.'</span><span class="time">'.$row->zeit.'</span>
	<div class="news_content">
	'.$fin.'<br><div class="grey">'.$words.' Wörter bzw '.$chars.' Zeichen</div>
	</div>
	</div><p>';
   }
?>

0

#6 Mitglied ist offline   [Elite-|-Killer] 

  • Gruppe: aktive Mitglieder
  • Beiträge: 762
  • Beigetreten: 02. Oktober 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Passau

geschrieben 26. Juli 2008 - 20:16

$fin ist aber in der Funktion nicht definiert!
0

#7 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 26. Juli 2008 - 20:25

Achso, aber wie soll ich das denn machen?
etwa so?
function rep($sm, $fin){
$fin = preg_replace('/:'.$sm.':/', '<img src="smilies/'.$sm.'.gif" alt="'.$sm.'" />', $fin);
};

$fin = preg_replace('/\[link\](.*?)\[\/link\]/', '<a href="$1">$1</a>', $fin);
	
rep("grinbig", $fin);


Es geht zwar nicht aber ich verstehe nun die Schwierigkeit.

Dieser Beitrag wurde von Toasterfraktion bearbeitet: 26. Juli 2008 - 20:29

0

#8 Mitglied ist offline   [Elite-|-Killer] 

  • Gruppe: aktive Mitglieder
  • Beiträge: 762
  • Beigetreten: 02. Oktober 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Passau

geschrieben 26. Juli 2008 - 20:38

function rep($sm, $fin){
$fin = preg_replace('/:'.$sm.':/', '<img src="smilies/'.$sm.'.gif" alt="'.$sm.'" />', $fin);
return($fin);
};
$fin = rep(..., $fin);
[...]

statt return($x); geht auch return $x;

Dieser Beitrag wurde von [Elite-|-Killer] bearbeitet: 26. Juli 2008 - 20:39

0

#9 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 26. Juli 2008 - 20:45

Jeha, super es kallapt nun, fetten danke [Elite-|-Killer] . ich hab mir gedacht dass er das am besten alles dynamisch macht.
		$smilies = array(
		"grinbig",
		"wink",
		"terror");

	for($x=0; $x < count($smilies); $x++)
	{
	$fin = rep($smilies[$x], $fin);
	}


Jetzt lass ich ihn nurnoch die Array automatisch zusammenbauen und ich kann die Smilies so steuern indem ich entweder einen Smiliy in das verzeichnis einfüge oder lösche!
Sehe ich das richtig? :-D
0

#10 Mitglied ist offline   [Elite-|-Killer] 

  • Gruppe: aktive Mitglieder
  • Beiträge: 762
  • Beigetreten: 02. Oktober 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Passau

geschrieben 26. Juli 2008 - 20:50

Ja, sollte vom Prinzip her so klappen.
statt for und count wäre vermutlich foreach einfacher.
Also konkret:
$smilies = array("grinbig", "wink", "terror");
foreach($smilies as $smilie)
{
$fin = rep($smilie, $fin);
}

Dieser Beitrag wurde von [Elite-|-Killer] bearbeitet: 26. Juli 2008 - 20:50

0

#11 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 26. Juli 2008 - 21:27

Ohaja Super, das ja nochmal weniger Code!

Ich bin grade mit meiner automatischen Array aufm Schlauch.

$smilies_read=opendir("smilies/");
	
$smile=readdir($smilies_read);
array_push($smilies, $smile);

print_r($smilies); // nur zum Test


Soweit bin ich nun, er hängt"." an die Array , ich muss aber eigentlich alles auslesen aber wie kann ich da denn eine Schleife einbauen?
Dankbar für einen Tipp! =}
0

#12 Mitglied ist offline   bardelot 

  • Gruppe: aktive Mitglieder
  • Beiträge: 517
  • Beigetreten: 20. März 04
  • Reputation: 0

geschrieben 26. Juli 2008 - 22:06

PHP: readdir

Zitat

string readdir ( resource $dir_handle )
Gibt den Dateinamen des nächsten Files des Verzeichnisses zurück.


[...]
	/* Das ist der korrekte Weg, ein Verzeichnis zu durchlaufen. */
	while (false !== ($file = readdir($handle))) {
		echo "$file\n";
	}
[...]

0

#13 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 26. Juli 2008 - 23:22

Gut , danke ich werds mir merken, es funktioniert alles!
0

#14 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 27. Juli 2008 - 03:12

Hm anscheinende nun doch nicht, habes es hochgeladen, dann komt ein Fehler:
$verz="smilies/";
if($dir=opendir($verz))
{
while($file=readdir($dir))
{
if (!is_dir($file) && $file != "." && $file != ".." && $file != "Thumbs.db") // Thats's Line #39
{
$files[]=$file;
echo "<img class='smilies' src=" . $verz . $file . "  ";
$name= explode(".", $file);
echo 'onClick="insert(\' :'.$name[0].':\', \' \')"';

echo "/>\n";
}
}
closedir($dir);
}

Zitat

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(..) is not within the allowed path(s): (/var/www/webXXX/html/:/var/www/webXXX4/phptmp/:/var/www/webXXX/files/:/var/www/webXXX/atd/:/usr/bin/) in /var/www/weXXX/html/myd/snips/beitrag.php on line 39


Kann das wieder an einer ausgeschalteten Funktion liegen?
0

#15 Mitglied ist offline   bardelot 

  • Gruppe: aktive Mitglieder
  • Beiträge: 517
  • Beigetreten: 20. März 04
  • Reputation: 0

geschrieben 27. Juli 2008 - 16:48

Versuchs mal so:

<?php

$verz = "smilies/";

if ($dir = opendir($verz))
{
  while (FALSE !== ($file = readdir($dir)))
  {
	if ($file == "." || $file == ".." || $file == "Thumbs.db" || is_dir($file))
	  continue;
	
	$files[] = $file;
	echo "<img class='smilies' src=" . $verz . $file . "  ";
	$name = explode(".", $file);
	echo 'onClick="insert(\' :'.$name[0].':\', \' \')"'."/>\n";
  }
closedir($dir);
}

?>


Beachte auch die Zeile:
while (FALSE !== ($file = readdir($dir)))


Zitat

open_basedir

Limit the files that can be opened by PHP to the specified directory-tree, including the file itself. This directive is NOT affected by whether Safe Mode is turned On or Off.

When a script tries to open a file with, for example, fopen() or gzopen(), the location of the file is checked. When the file is outside the specified directory-tree, PHP will refuse to open it.

http://de.php.net/features.safe-mode
0

Thema verteilen:


  • 2 Seiten +
  • 1
  • 2

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0