AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [PHP] preg_replace ersetzt "falsch"
Thema durchsuchen
Ansicht
Themen-Optionen

[PHP] preg_replace ersetzt "falsch"

Ein Thema von Aenogym · begonnen am 13. Jul 2005 · letzter Beitrag vom 13. Jul 2005
Antwort Antwort
Benutzerbild von Aenogym
Aenogym

Registriert seit: 7. Mär 2004
Ort: Schwerin
1.089 Beiträge
 
Delphi 7 Enterprise
 
#1

[PHP] preg_replace ersetzt "falsch"

  Alt 13. Jul 2005, 00:16
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
Steffen Rieke
Was nicht buzzt, wird buzzend gemacht!
http://blog.base-records.de
http://www.base-records.de
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

Re: [PHP] preg_replace ersetzt "falsch"

  Alt 13. Jul 2005, 00:23
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
Vielleicht hilft es dir ja ein kleines bisschen weiter

Greetz
alcaeu
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Aenogym
Aenogym

Registriert seit: 7. Mär 2004
Ort: Schwerin
1.089 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: [PHP] preg_replace ersetzt "falsch"

  Alt 13. Jul 2005, 00:39
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

aenogym
Steffen Rieke
Was nicht buzzt, wird buzzend gemacht!
http://blog.base-records.de
http://www.base-records.de
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#4

Re: [PHP] preg_replace ersetzt "falsch"

  Alt 13. Jul 2005, 00:50
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).
Die Zeilen sind auch in einem Standard-phpBB anders, ich hab ja auch ein "Spezialbeispiel" draus gemacht

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#5

Re: [PHP] preg_replace ersetzt "falsch"

  Alt 13. Jul 2005, 05:04
Wozu überhaupt irgendwelche preg_replaces?

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
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: [PHP] preg_replace ersetzt "falsch"

  Alt 13. Jul 2005, 06:48
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.
Volker
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#7

Re: [PHP] preg_replace ersetzt "falsch"

  Alt 13. Jul 2005, 09:09
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.
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#8

Re: [PHP] preg_replace ersetzt "falsch"

  Alt 13. Jul 2005, 10:33
Zitat von Airblader:
Wozu überhaupt irgendwelche preg_replaces?
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
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Aenogym
Aenogym

Registriert seit: 7. Mär 2004
Ort: Schwerin
1.089 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: [PHP] preg_replace ersetzt "falsch"

  Alt 13. Jul 2005, 10:57
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
Steffen Rieke
Was nicht buzzt, wird buzzend gemacht!
http://blog.base-records.de
http://www.base-records.de
  Mit Zitat antworten Zitat
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#10

Re: [PHP] preg_replace ersetzt "falsch"

  Alt 13. Jul 2005, 11:55
@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
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:29 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