Smilies automatisch erkennen lassen

FP4Lisa

Mitglied
Also folgendes ... ein alt bekanntes Spiel denke ich ... man gibt etwas ein und schwupsdiewups ist es ein gif auch Smilie genannt!
Nun habe ich mir dazu meine Gedanken gemacht ... sicher kann man das mit php und str_replace tun, das script habe ich auch fertig. Nur ist mir an der ganzen Sache ein Makel aufgefallen ... ich möchte das nun für die ganze HP anwenden, egal wo das Zeichen x erscheint soll es SOFORT in einen Smilie umgewandelt werden.
Bei str_replace müsste ich aber immer alles extra noch als string überprüfen lassen, was heißt den Code nicht nur auf der Hauptseite, sondern auch in jedem kleinen Formular einfügen und bla, das ist mir echt zu umständlich. Zudem würde php mir das bei Formularen nicht immer gleich ausgeben, sondern erst wenn ich das abschicke, serverseitige Script, logisch ... !
Nun bin ich ratlos ... php und html sind soweit kein Problem aber Java kann ich NOCH net, denn ich denke damit kann ich das irgendwie realiesieren. Denn eine Java Uhr läuft ja auch permanent ohne meta_refresh ... also denke ich mal ich liege bei der Sprache schon richtig.
Hat den bitte wer einen Lösungsvorschlag oder besser einen Denkansatz für mich. Ich stelle mir das so vor, eine Funktion im head meiner home seite und ein aufrufen im bodytag und schon sucht er automatisch permanent die Seite auf smilies ab und wandelt sie um. Ich habe keine Ahnung und hoffe das die mit ein wenig Hilfe mein erstes Projekt in Java werden kann .... hat wer Rat für mich wie ich da ran gehe?
 
Zuletzt bearbeitet:
Die Javauhr ist sicher eine JavaScript Uhr. Das hat beides nichts miteinander zu tun. Das geht sicher mit JavaScript, aber dazu solltest Du mal im richtigen Forum nachlesen oder -fragen.
 
Ja toll danke, frage ich denn hier gerade nicht nach? Klar hab ich vorher gesucht und mir alles Mögliche zu Smilies durchlesen können, nur irgendwas brauchbares war net dabei. Bitte belehre mich eines besseren, wäre nicht traurig drum, wenn ich etwas übersehen hätte. Das ne Java Script Uhr auch net wirklich was mit Smilies zu tun hat weiß ich auch. Was ich damit sagen wollte ist, das php die falsche Sprache wäre, um zu erläutern das php schon soetwas bietet aber zu mager.
Na egal aber deine Antwort scheint mir eher ein komischer Kommentar ... ich denke mit solchen nichts-sagenden sollte man sparsamer sein ... egal. Vielleicht het ja doch noch jemand einen brauchbaren Hinweis für mich, damit ich mich in die Materie reinfruchsen kann. LG FP4Lisa
 
Zuletzt bearbeitet:
Also, das Ganze ist etwas weniger einfach, als du es dir denkst. Du müsstest, wenn du nicht gerade mit Frames arbeitest das Script in allen HTML-Dateien zumindest referenzieren.

Rein vom Prinzip her:
JavaScript als clientseiteige Sprache kann schonmal nicht auf Serverdaten zugreifen, was Verzeichnisse, Dateien und Datenbanken einschließt. Du müsstest also deine Smilie-Datenbank per PHP-Script, das JavaScript-Code ausgibt in ein JS-Array schreiben. Dann baust du dir eine Funktion, die sich selbst per setTimeout() in intervallen selbst aufruft. Diese Funktion holt sich den Wert der innerHTML-Eigenschaft des <body>-Tags deines Dokumentes in einer for-Schleife. In dieser for-Schleife wird jedes Text-Smiley aus dem Array einzeln rausgesucht im innerHTML-Wert gesucht und durch ein entsprechendes <img>-Tag mir dem zugehörigen Bild per replace() (änlich wie str_replace) ersetzt. Danach musst du nur noch die innerHTML-Eigenschaft neu setzten.

Nachteil des Ganzen: Es ist etwas aufwendig, schwierig für JS-Anfänger zu programmieren und da innerHTML verwendet wird auch nicht DOM-Kompatibel. Außerdem hab ich's wohl nicht wirklich verständlich und ausführlich erklärt.

Soweit so gut, das sollte dir zumindest mal nen Ansatz geben.
 
Zuletzt bearbeitet:
Danke dir für die liebe Antwort, auch im "falschen" Forum ;-) ... du weißt ja was ich meine, also folgendes:
Meine HP ist so aufgebaut, das es eigentlich nur eine Seite gibt in der das body-tag vertreten ist, da ich alles andere per php mit einem Switch ... case ... bla ... in die Seite an die Stelle für den Inhalt einfüge.
Schade das es nicht so einfach geht. Auf jeden Fall habe ich keinen Bock auf ein iframe wenn ich ehrlich bin, ich versuche frames zu umgehen, da ich sie genauso bescheiden finde wie Tabellendesigner ... naja.
Mal eine blöde Frage, was ist "DOM", ich denke mal ein Standard ... mhmm ... ich sage mal so, es wäre auch oki, wenn das, was gerade eingegeben wird nicht kontrolliert wird. Also denke ich mal eine vereinfachte Variante ohne Timeout wäre auch ok, wäre das denn dann kompatibel? Zudem habe ich eh net daran gedacht, das Formularfelder gifs eh net darstellen, so habe ich es gelesen, das mit dem Timeout kann ich mir also echt sparen.
Ach ja innerHTML-Eigenschaften <- sind das Befehle die im body Tag aufgerufen werden? ist also meine Uhr auch net gut so? *heul*blinzel*
Ich weiß viele blöde Fragen ... auch wenn es die net gibt *ggg* wie man so sagt, halt nervige Anfänger fragen ;-) ich hoffe ich darf das heute mal !?
LG FP4Lisa
 
Ach herjeh, so viele Fragen. Da fang ich am besten gleich mal an:
DOM steht für Document Object Model und ist ein W3C-Standart so wie XHTML und XML. Er wurde ins Leben gerunfen um Markup-Sprachen wie die beiden genannten durch Programmiersprachen einheitlicher und leichter zu manipulieren. Leider ist das Verfahren, wie man neue Tags (wie z.B. deine Smiley-Bilder, die ja auch <img>-Tags sind) einfügt etwas... sagen wir mal umständlich :rolleyes:
Es ist kaum zu glauben aber Winzigweich (Microsoft) hat auch mal was gutes gemacht. Die innerHTML-Eigenschaft - womit wir zur nächsten Frage kommen - ist nämlich zuerst im Explorer aufgetaucht und weil der damals noch einen viel größeren Markanteil hatte, haben auch die anderen Browser die übernommen. Jeder Tag in einer html-Datei ist für JavaScript ein Objekt. Dieses Objekt hat Eigenschaften, wie z.B. wo im Dokument es steht, was für Attribute es hat oder eben, was an HTML-Code im Elment drinsteht. Letzeres ist die InnerHTML Eigenschaft. Im DOM-Standart ist die Eigenschaft nicht drinen, weswegen du anstatt direkt auf den HTML-Inhalt von Tags zugreifen zu können du auf diese Tags zugreifen musst. Aber das ist noch ein wenig zu kompliziert und auch nicht so wichtig. Für den Anfang würd ich dir empfelen dich nicht ums DOM zu kümmern und innerHTML nach herzenslust zu verwenden.
Mal ein Beispiel: Deine Uhr. Eine Zeile daraus ist
document.getElementById("uhrzeit").innerHTML = uhrzeit;
wobei "uhrzeit" eine Variable mit der aktuellen Uhrzeit im richtigen Format ist. Hier wird die innerHTML-Eigenschaft des Objektes mit der id="uhrzeit" (bei dir ein <span>-Tag weiter unten), das Element des ganzen Dokumentes ist auf den Wert der Variablen "uhrzeit" geändert.

Was deine Uhr angeht, so kann man sie relativ einfach ans DOM anpassen und vom Code noch etwas abspecken. Den onload-Event im <body>-Tag sowie die <span>-Tags im Dokument finde ich auch etwas unelegant.
Hab die Uhr mal ein wenig umgeschrieben (füge das Script einfach direkt an die Stelle, wo die Uhr hin soll anstatt der beiden <span>-Tags ein und nehm den onload-Event aus dem <body>-Tag raus):
HTML:
<script type="text/javascript">
 	document.write('<span id="datum">&nbsp;</span> | <span id="uhrzeit">&nbsp;</span>');
            	
            	function leadzero(number) { return(number<10) ? '0' + number.toString() : number; }
            
            	function clock() {
            
            		var today = new Date();
     		var	y =	today.getFullYear(),
            			M = leadzero(today.getMonth()+1),
            			d = leadzero(today.getDate()),
            			h = leadzero(today.getHours()),
            			m = leadzero(today.getMinutes()),
            			s = leadzero(today.getSeconds());
            
  		document.getElementById('uhrzeit').firstChild.data = h +':'+ m +':' + s;
            		document.getElementById('datum').firstChild.data = d +'.'+ M +'.'+ y;
            		
            		setTimeout("clock()", 999)
            
            	}//clock()
            	clock();
 </script>
Wenn du jetzt mal die Funktion "clock()" mit der alten Funktion "Zeit()" vergleichst kommt sie abgespeckt, ohne onload und ohne spans mit knapp 50% weniger Zeichen aus und steht genau an der Stelle, wo die Uhr steht, was ich auch wieder als Vorteil sehe.


Nun aber zum eigentlich wichtigen: Den Frame bräuchtest du nur quasi als Ramen, der immer gleichbleigt und wo die Funktion drin geladen ist, aber da, wenn ich dich richtig verstanden haben, deine ganze Seite sowieso eine Einzige php-Datei ist, reicht auch das Script im <head>. Du kannst es somit ohne Frames realisieren.
Ansonsten, wenn die Funktion zum Simley-Ersetzen nicht mit setTimeout() ständig neu aufrufst, könntest du's ja gleich mit PHP und str_replace machen. Dann wär's ja "gehupft wie gesprungen". So viel blöder ist das mit setTimeout auch nicht.

Hab aber jetzt genug theoretisch rumgelaber, bin mal gespannt ob du's hinkrigst,
 
Zuletzt bearbeitet:
FP4Lisa hat gesagt.:
Ja toll danke, frage ich denn hier gerade nicht nach?
LG FP4Lisa
Der Beitrag wurde hierher verschoben. Vorher war er im Javaforum, das solltest Du als Threadopener eigentlich wissen. Das mit dem Unterschied bezog sich darauf, dass Java kein JavaScript ist.
 
... ? ... verschoben wurde hier garnichts, ich habe mich verklickt, es gemerkt und musste das Thema noch mal im richtigen Forum eröffnen ... .... ... ? ...
 
So PHP schaut dann so aus:

Code:
<?php ###############ZENSIEREN#########################
 		    		    		function zensieren($zensur) {
 					// Verbindung zur Datenbank
 		    		$connection = mysql_connect("xxx", "xxx", "xxx");
 					
 		    		    	if (!$connection) // Frage nach Verbindung
 		    		    	{	// wenn keine Verbindung
 		    		    		exit;
 		    		    	}
 					
 		    		    	mysql_select_db("yyy"); //Datenbank ansprechen
 					
 					// UNERLAUBTE AUSDRÜCKE ERSETZEN
 		    		    		$sqlz = "SELECT * FROM zensur";
 		    		    	
 		    		    		$resultz = mysql_query($sqlz) or die("Error: " . mysql_error());
 		    		    		$gefundenz = mysql_num_rows($resultz);
 		    		    		while($datenz = mysql_fetch_array($resultz))
 		    		    		    		{
 		    		    		    		$wort = $datenz["Wort"];
 		    		    		    		$neu = $datenz["Neu"];
 		    		    		    		$zensurö  = str_replace($wort,$neu,$zensur);
 		    		    		    		}
 					
 					// SMILEYS DURCH BILDER ERSETZEN
 		    		    		$sqls = "SELECT * FROM smile";
 		    		    	
 		    		    		$results = mysql_query($sqls) or die("Error: " . mysql_error());
 		    		    		$gefundens = mysql_num_rows($results);
 		    		    		while($datens = mysql_fetch_array($results))
 		    		    		    		{
 		    		    		    		$zeichen = $datens["Zeichen"];
 		    		    		    		$bild = $datens["Bild"];
 		    		    		    		$zensur = str_replace($zeichen,'<image src="/fp4lisahp/design/smilies/'.$bild.'">',$zensur);
 		    		    		    		}
 					return $zensur;
 					}
 			?>

nun könnte ich ne variable zensur mit der funktion zensieren und dann zurückgeben. Nur habe ich keine Ahnung, wie ich php anweise einfach mal allen ausgegebenen Text damit zu zensieren *hmmm* also einzeln einbauen ... brrrr ... Fauli ich bin naja muss ich dann ja.
DANKEFEIN für deine lieben Erklärungen ;-) !
 

Neue Beiträge

Zurück