Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] preg_replace ersetzt "falsch" (https://www.delphipraxis.net/49575-%5Bphp%5D-preg_replace-ersetzt-falsch.html)

Aenogym 13. Jul 2005 00:16


[PHP] preg_replace ersetzt "falsch"
 
hi leute,

ich kenne mich leider nur ganz schlecht mit regulären ausdrücken aus. ich benutze folgenden code, um die zeichen ; ) in den smiley ;) umzuwandeln:

Code:
$text = preg_replace("/;\)/", "<img src=\"images/smilies/wink.png\" alt=\"Zwinkern\" title=\"Zwinkern\"/>", $text);
soweit so gut. funktioniert auch. nur, wenn er zu folgenden zeichen kommt:
")
ersetzt er die schließende klammer mit dem img.tag. das " für dem bildchen bleibt bestehen.
(und ja, es passiert nur, wenn er die folge ") findet. ohne dem " ist alles ok. und ohne der ) ebenfalls... nur nicht, wenn beide zeichen hintereinander auftauchen :( )


ich weiß nicht, wieso er das falsche auch damit ersetzt...
könnt ihr mir da helfen? :)

danke schonmal,
aenogym

alcaeus 13. Jul 2005 00:23

Re: [PHP] preg_replace ersetzt "falsch"
 
Moin Aeno,

ich kenne mich zwar auch nicht so ganz mit regulaeren Ausdruecken aus, aber vielleicht hilft dir ja ein Blick ins phpBB. Dort wird ein Smiley so ersetzt:
Code:
$smiley_code = ';)';
$smiley_url = 'images/smilies/wink.png';
$smiley_emoticon = 'Zwinkern';
$orig = "/(?<=.\W|\W.|^\W)" . phpbb_preg_quote($smiley_code, "/") . "(?=.\W|\W.|\W$)/";
$repl = '[img]'. $smiley_url . '[/img]';
$text = preg_replace($orig, $repl, ' ' . $text . ' ');
$text = substr($text, 1, -1);
Du kannst $orig und $repl natuerlich auch als array deklarieren, und alles in einem Schritt ersetzen lassen. Zur Regexp: ich hab keine Ahnung warum das so umstaendlich gemacht werden muss, aber es funktioniert :mrgreen:
Vielleicht hilft es dir ja ein kleines bisschen weiter ;)

Greetz
alcaeu

Aenogym 13. Jul 2005 00:39

Re: [PHP] preg_replace ersetzt "falsch"
 
durch die phpbb bbcode datei hatte ich mich auch grad gekämpft. aber anscheinend habe ich eine andere version (nutze http://www.koders.com).

aber nun klappt es. vielen, vielen dank :)

edit: natürlich benutze ich arrays. hab ja mehr als einen bbcode zu erstzen :mrgreen:

aenogym

alcaeus 13. Jul 2005 00:50

Re: [PHP] preg_replace ersetzt "falsch"
 
Zitat:

Zitat von Aenogym
durch die phpbb bbcode datei hatte ich mich auch grad gekämpft. aber anscheinend habe ich eine andere version (nutze http://www.koders.com).

:gruebel: Die Zeilen sind auch in einem Standard-phpBB anders, ich hab ja auch ein "Spezialbeispiel" draus gemacht :lol:

Greetz
alcaeus

Airblader 13. Jul 2005 05:04

Re: [PHP] preg_replace ersetzt "falsch"
 
Wozu überhaupt irgendwelche preg_replaces? :gruebel:

Code:
$code = Array();
$repl = Array();

$code[] = ";)";
$repl[] = "<img src=\"zwinker.gif\" alt=\"Zwinkern\" title=\"Zwinkern\">";

$code[] = ":)";
$repl[] = "<img src=\"irgendwas.gif\" alt=\"bla\" title=\"bla\">";

// Eine Möglichkeit wäre auch mit Leerzeichen zu arbeiten:
$code[] = " :P";
$repl[] = "...";

...

$text = str_replace($code, $repl, $deinText);
air

Flocke 13. Jul 2005 06:48

Re: [PHP] preg_replace ersetzt "falsch"
 
Zitat:

Zitat von Aenogym
Code:
$text = preg_replace("/;\)/", "<img src=\"images/smilies/wink.png\" alt=\"Zwinkern\" title=\"Zwinkern\"/>", $text);
soweit so gut. funktioniert auch. nur, wenn er zu folgenden zeichen kommt:
")
ersetzt er die schließende klammer mit dem img.tag. das " für dem bildchen bleibt bestehen.
(und ja, es passiert nur, wenn er die folge ") findet.

Wenn du dir ") in HTML ansiehst, dann ist das
Code:
& q u o t ; )
und da hast du natürlich Semikolon+Klammer drin. Also sollten >), <) und &) ebenfalls Probleme machen (ggf. auch ä) ). Mache es so wie Airblader geschrieben hat, mit einfachem str_replace.

Olli 13. Jul 2005 09:09

Re: [PHP] preg_replace ersetzt "falsch"
 
Wenn man sich schlecht mit Regulären Ausdrücken auskennt, oder auch wenn man sich gut auskennt aber faul ist, gibt es Regex Buddy. Sehr sehr geiles Programm. 3-monatige Rückgabegarantie inklusive. Leider keine Trial verfügbar. Aber ich habe es und bin sehr zufrieden. Wurde übrigens scheinbar mit Delphi oder BCB geschrieben.

alcaeus 13. Jul 2005 10:33

Re: [PHP] preg_replace ersetzt "falsch"
 
Zitat:

Zitat von Airblader
Wozu überhaupt irgendwelche preg_replaces? :gruebel:

Weil regexps zwar komplizierter sind als ein normaler Text, aber man damit mehr machen kann. Irgendwann ist es Gewohnheit eine Regexp zu verwenden.
Und ausserdem: str_replace hilft hier auch nicht, warum auch? ;) ist ;), wird also von preg_replace als auch von str_replace ersetzt.
Abhilfe schafft hier nur eins. Wenn die Zeichen als Entities daherkommen, einfach ein html_entity_decode() (vorsicht, gibts erst ab PHP 4.3.0) und anschliessend wieder ein htmlentities(), dann wirds auch so funktionieren. ;)

Greetz
alcaeus

Aenogym 13. Jul 2005 10:57

Re: [PHP] preg_replace ersetzt "falsch"
 
ich nehme die reg-exp's weil ich in einem rutsch die smilies und sonstige bbcodes ersetzen lasse. und gerade für bbcodes àlà [ url=http://www.google.de] ist regexp quasi unverzichtbar ;)

aenogym

Airblader 13. Jul 2005 11:55

Re: [PHP] preg_replace ersetzt "falsch"
 
@alcaeus

Nunja, aber halt Manual lesen:

Zitat:

http://de.php.net/str-replace schreibt:

Falls Sie keine ausgefallenen String-Ersetzungen brauchen, sollten Sie immer dieser Funktion den Vorzug vor ereg_replace() oder preg_replace() geben.
;)

air


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz