Smileys

haldjo1

Erfahrenes Mitglied
also ich dreh langsam aber sicher durch
ich hab jetzt schon ewig gesucht aber nix richtiges gefunden.

kann mir irgendjemand erklären wie das mit eregi_replace oder str_replace geht?

ich will smileys einfügen wenn z.B jemand :D schreibt oder so.oder soll ich das lieber mit javascript machen? bitte genau erklären da ich wie gesagt noch nix gefunden hab was mir geholfen hätte.

thx
 
etwas detaillierte informationen wären ganz nützlich, z.B. obs du deine informationen aus einer datenbank abrufst oder ähnliches..aber vielleicht wird dir das hier helfen:
wenn du einen string, nennen wir ihn mal $text ausgeben willst, ersetzt du vor der ausgabe in diesem string per str_replace (mit eregi_replace kenn ich mich nicht so gut aus :D) um dein Beispiel aufzugreifen, ":D" durch "<img src="http://www.irgendwas.de/bildxyz.jpeg">"
wenn du nun z.B. eine mysql-abfrage durchgeführt hast (und $text abgefragt hast) sähe das so aus:
PHP:
 <?  str_replace(":D", "<img src='blabla.jpeg'>", $text);  //ersetzt :D durch die Quelle für die Smiley-grafik, innerhalb des strings $text
 echo "$text";
?>

die funktionsbeschreibung bei php.net zu str_replace fand ich eigentlich gar nicht schwer..daher hab ich gelernt wie man smileys macht :D
 
Zuletzt bearbeitet:
problem mit str_replace und funktionen

so nun hab ich aber ein problem mit der str_replace funktion vielleicht kann mir da mal jemand helfen!
Ich hab ein newsscript geschrieben und die datei shownews.php regelt die ausgabe von mehreren sachen (news, news und comments, archiv..usw.) und bei jeder dieser ausgaben hatte ich bisher so 20 str_replace stehen, um smileys und so zu ersetzen - also dachte ich mir ich versuch mal das übersichtlicher zu machen und hab folgende funktion geschrieben:
PHP:
function ersetzen ($string) {
$string = str_replace("[ b ]", "<b>", $string);
$string = str_replace("[ /b ]", "</b>", $string); //ungefähr noch 15 weitere..ist klar denke ich
return $string;
}
so und dann hatte ich nach einer mysql-abfrage folgendes da stehen:
PHP:
$ausgabe = ersetzen($data[inhalt]); //$data[inhalt] stammt aus einem mysql_fetch_array
echo $ausgabe;
so und als ich es ausprobiert hab gab es zwar keine fehlermeldung, aber es wurde auch nix ausgegeben...warum?
 
Hm, man sollte das nicht mit str_replace machen, nimm lieber preg_replace, ist sicherer:

PHP:
<?php
function replace($string) {
    print(preg_replace("=(\[ b\])(.*)(\[/ b\])=sU","<b>\\\\2</b>",$string));
}
?>

Edit: Ihr müsst nur noch die Leerzeichen entfernen :)
Edit: grml, dummes rumgeparse :)
 
Zuletzt bearbeitet:
mmh ich versteh das format von preg_replace irgendwie nit...
erklär mal..(habs im php-manual nit gefunden)
und biste sicher dass das dann klappt?
mit dem print?
weil ich muss ja mehr als eine sache ersetzen...ich weiß nicht...
*verwirrtsei*
 
ja, ob du nun print oder return verwendest ist im prinzip laddn :)

Also, preg_replace ersetzt teile von strings nach einem angegebenen muster, in diesem fall sucht er in dem angegebenen string nach einem text der zwischen [ b] und [/ b] steht und macht ihn fett :) Wenn du str_replace verwendest wird jedes [ b] mit <b> ersetzt, also kann jemand den gaaaanzen nachfolgenden text in deinem gb/forum/wasauchimmer fett machen. preg_replace lässt in dem fall nur <b> zu wenn auch ein dazu passendes </b> folgt.
Zum format soviel: Alles was in () steht wird später zu einem \\n wobei n eine fortlaufende nummer ist :) deshalb ist \\2 auch der teil im ausdruck: (.*) was soviel heisst wie "alles zwischen [ b] und [/ b].

Edit: Krass, im [ php]-tag parst er die \ und im normalen text nicht...
 
also muss ich jetzt quasi die funktion so aufbauen:

PHP:
function replace ($string){
$string = preg_replace("=([ b])(.*)([/ b])=sU","<b>\\2</b>",$string);
$string = preg_replace("=([ i])(.*)([/ i])=sU","<i>\\2</i>",$string);
/* und so weiter */
return $string;
}
oder? (sorry aber ich bin heut morgen irgendweie schwer von begriff :D )
aber der teil nach der abfrage:
PHP:
$ausgabe = replace($data[inhalt]);
echo $ausgabe;
ist richtig so, oder?
viele fragen...was ist wohl die antwort..
gespannt wartet euer meisterbrau
 
Jo, das ist richtig, vor der 2 im Code müssen immer 2 \ stehen, aber der eine wurde vom Forum weggeparst, also passt das schon :)

Edit: Achja, du kannst an das Ende des Ausdrucks hinter =sU noch ein "i" hängen, dann ist der Ausdruck nicht mehr Case-Sensitive, also geht [ b] und [ B] :)
 
Zuletzt bearbeitet:
jo das mit den 2 \ ist klar..
2 fragen noch (man bin ich neugierig,was? :-) ):
1. hast du vielleicht den link zu der erklärung von preg_replace
2. (kann durch 1 beantwortet werden) und wofür steht sU?

achja und natürlich bevor ichs vergesse:
Vielen Dank @ Kab00m!

p.s.: eine sache haben wir beide vergessen, die mir auffiel als ichs testen wollte und ein lustiger buchstabensalat rauskam:
die eckigen Klammern im Suchmuster müssen escaped werden :D sonst ersetzt der jedes "b" :-)
 
Zuletzt bearbeitet:
Zurück