Willkommen in der Webstatt Zum Webstatt Blog und Stories
web4 am 05.03.06 00:10

hallo zusammen,

ich hätte eine frage...wenn ich einen text habe.. und möchte diesen mit smilies bestücken mache ich ja so:

$msg= ereg_replace(':-)', '<img src=images/smilies/smilies1.gif></img>' , $text);

aber wie kann ich den ganzen text mit 10 smiles bestücken.. also 10 mal ereg_replace ist etwas unschön und aufwändig...

gibt es da einen eleganteren weg?
danke!
web4

netcup.de Warum gibt es hier Werbung?
bastey bastey am 05.03.06 00:19

Wie wäre es mit einem Array:

$smilieArray = array(
':D' => 'smilie.gif',
':(' => 'smilie2.gif',
);
foreach ( $smilieArray AS $icon => $file )
{
$msg = ereg_replace($icon, '<img src=images/smilies/'.$file.'/>' , $text);
}

Sven Sven am 05.03.06 00:37

Wenn ich mich jetzt noch beschweren dürfte, das hier ereg_ statt preg_ benutzt wird.... :D

bastey bastey am 05.03.06 00:46

Darfst du nicht.

Die Frage ist ja nicht gewesen, mit welcher Funktion und wie wandle ich Textzeichen in Smilies um.

der_nic der_nic am 05.03.06 00:52

er wolte doch nur helfen...?!

Sven Sven am 05.03.06 00:52

Ok, dann habe ich nix gesagt. ^^

Michael Michael am 05.03.06 09:28

Du könntest auch einfach str_replace benutzen. Alle regulären Ausdrücke machen erst bei Suchmustern Sinn, nicht aber bei statischen Text.
Insbesondere bei der Regex Unterstützung von PHP sollte man sie nur dort benutzen wo es wirklich nötig ist.

Des Weiteren: Wenn du den Such- und Ersetzteil jeweils in einen Array speicherst, kannst du str_replace als Argumente auch diese Arrays übergeben und sparst dir so die foreach Schleife.

Michael

P.S.: Natürlich sind die preg_* Funktionen immer den ereg_* Funktionen vorzuziehen

web4 am 06.03.06 00:03

so ich hab mal eure inputs durch gearbeitet! ich habe mich schlussendlich für michael's str_replace entschieden... wobei auch dockers variante mit ereg_replace funktioniert... jedoch kann man mit str_replace ein paar zeilen code sparen...
vielen dank für eure hilfe!
gruss
benjamin

bastey bastey am 06.03.06 01:17

Halt, es war deine Idee mit ereg_replace!

Dustwolf Dustwolf am 06.03.06 09:21

Wenn ich {...} ersetzen will (statt der Punkte ein wilkürlicher Text), geht das ebenso? Nur { und } davor setzen, oder erkennt er die als irgend nen Modifier an?

$msg = ereg_replace('{text}', '' , $text);

milahu milahu am 06.03.06 13:47

Bitte gewöhne dir ereg_* ab, das Zeug ist veraltet!
<?php
$msg = preg_replace( '/{.*?}/s', '', $msg );
?>

Franky Franky am 06.03.06 14:22

Einfach so...

<?
$text = 'Hallo ;) :D';

$smilies = array(
':)' => 'smile',
':D' => 'laugh',
';)' => 'wink');

foreach($smilies as $icon => $filename) $text = str_replace($icon, '<img src="/images/smilies/'.$filename.'.gif" alt="'.$icon.'" />', $text);

echo $text;
?>

Dustwolf Dustwolf am 06.03.06 15:22

Milahu, ich hab das doch einfach so kopiert. ;-)

Wieso denn /s und woran erkennt der, dass das nen Modifier ist? *Regex lernen will*


Irgendwie snd die Tutorials, die ich bisher kenne alle sehr kompliziert oder nciht direkt für PHP, was mich dann demotiviert. ;)

Michael Michael am 06.03.06 15:35

Regex mit PHP ist auch ein Krampf.

Ein Regex ist immer von zwei gleichen Zeichen umschlossen, die im Regex (unescaped nciht vorkommen dürfen. Alle Buchstaben nach dem zweiten schließenden Begrenzer werden als Modifier interpretiert.

Zum lernen kann ich dir das Buch "Reguläre Ausdrücke" empfehlen.

Dustwolf Dustwolf am 06.03.06 16:07

Danke.
Werd ich mir mal anschauen. Hab zwar schon wieder auf deinen Post 3 und mehr Fragen, aber ich will nicht das Thema komplett untergraben. Außerdem wäre es viel Arbeit, wenn man mir versucht Regex beizubringen. :D

Michael Michael am 06.03.06 16:09

Frag ruhig dafür ist das Forum da.
Alternativ kannst du ja einen neuen Thread für dieses Thema aufmachen -dort wäre dann der richtige Platz all deine Regexfragen zu diskutieren

milahu milahu am 06.03.06 16:12

Quote
Original von Michael
Regex mit PHP ist auch ein Krampf.

Hmm? Nur weil die Syntax nicht so schön wie in Perl ist...

Michael Michael am 06.03.06 16:26

Auch aber ich meinte eher die Ausführungszeit und die vorhandenen (Regex-)Operatoren

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt