AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[PHP] ereg_replace

Ein Thema von FAlter · begonnen am 10. Jun 2010 · letzter Beitrag vom 10. Jun 2010
Antwort Antwort
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#1

[PHP] ereg_replace

  Alt 10. Jun 2010, 18:18
Hi Leute,

ich habe festgestellt, dass PHP die Funktion ereg_replace als deprecated markiert hat. Nun suche ich nach einer Alternative.

Es geht darum, URL sowie www-Domains in den HTML-Code für Links umzuwandeln.

Momentan verwende ich folgenden Code:

PHP-Quellcode:
$text = ereg_replace("(^| |\n)([[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/])","\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $text);
$text = ereg_replace("(^| |\n)(www([.]?[a-zA-Z0-9_/-])*)", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $text);
Nun suche ich nach einer Alternative. preg_replace ist nicht deprecated, aber dann müsste ich mir ja neu Gedanken über den RegEx machen. Gibt es da noch eine andere Alternative die mir jetzt nicht ins Auge fällt?

Gruß
Felix
Felix Alter
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#2

AW: [PHP] ereg_replace

  Alt 10. Jun 2010, 18:23
preg_replace aus den PRCE Functions.

Liebe Grüße,
Valle
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: [PHP] ereg_replace

  Alt 10. Jun 2010, 18:31
Zukünftig einfach nach der Funktion auf php.net suchen ereg_replace. Dann steht das da alles:

Zitat:
Hinweis: Seit PHP 5.3.0 ist die regex-Erweiterung zugunsten der PCRE-Erweiterung als veraltete markiert. Ein Aufruf dieser Funktion wird eine E_DEPRECATED-Notice ausgeben. Sie können sich die Liste der Unterschiede ansehen, wenn Sie Hilfe beim Umstieg auf PCRE benötigen.

Die Funktion preg_replace(), die eine zu Perl kompatible Syntax regulärer Ausdrücke verwendet, ist häufig die schnellere Alternative zu ereg_replace().
Edit @Valle: Es heißt PCRE (= Perl Compatible Regular Expressions), nicht PRCE.
Edit 2 @Dennis unter mir: Stimmt. Ich habe nur bis "Nun suche ich nach einer Alternative." gelesen (Valle vielleicht auch) und dachte, es sei klar, was Felix wissen will. *g*
Aber @Felix: Das ist eine Standard-RegEx, die man leicht finden sollte.

Geändert von Matze (10. Jun 2010 um 18:47 Uhr)
  Mit Zitat antworten Zitat
DenSchub

Registriert seit: 4. Jun 2006
Ort: Balingen
209 Beiträge
 
#4

AW: [PHP] ereg_replace

  Alt 10. Jun 2010, 18:42
Er schreibt doch, das er eine alternative zu ereg_replace und preg_replace sucht:
preg_replace ist nicht deprecated, aber dann müsste ich mir ja neu Gedanken über den RegEx machen. Gibt es da noch eine andere Alternative die mir jetzt nicht ins Auge fällt?
Also um die Frage zu beantworten: Nein.
Dennis Schubert
Ground Zero is nichts gegen mein Schreibtisch.
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#5

AW: [PHP] ereg_replace

  Alt 10. Jun 2010, 18:47
Stimmt, Tatsache.

Wieso schreibt er das? Die sind doch sehr kompatibel. Ich würde mal ganz spontan behaupten du müsstest nichts an deinem Code ändern.

Liebe Grüße,
Valle
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#6

AW: [PHP] ereg_replace

  Alt 10. Jun 2010, 18:50
Stimmt. Die einzige Änderung wäre vor dem RegEx ein "/" und danach nochmal. Du verwendest ja nicht eregi_replace also brauchst du nach dem abschließenden "/" auch keine Parameter.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

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

AW: [PHP] ereg_replace

  Alt 10. Jun 2010, 19:14
Moin FAlter,

Nun suche ich nach einer Alternative. preg_replace ist nicht deprecated, aber dann müsste ich mir ja neu Gedanken über den RegEx machen. Gibt es da noch eine andere Alternative die mir jetzt nicht ins Auge fällt?
die einzige Alternative ist die PCRE. In PHP gibt es keine anderen Regular Expressions, und allgemein sind die PCRE-Funktionen nicht nur in PHP beliebt sondern generell.

Hier nochmal dein Code:
PHP-Quellcode:
$text = ereg_replace("(^| |\n)([[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/])","\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $text);
$text = ereg_replace("(^| |\n)(www([.]?[a-zA-Z0-9_/-])*)", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $text);
Ein Vorteil: die Preg-Funktionen kannst du in den multiline-Modus schalten (mit dem m-Modifier), so dass du nicht auf (^| |\n) als Delimiter sondern einfach auf (^|\b) matchen brauchst. Das ^ matcht im Multiline-Modus naehmlich auch einen Zeilenanfang, und das \b ist ein Word-Break.

Ich kenn mich jetzt mit den ereg-Funktionen nicht so gut aus, mag dich aber daran erinnern dass du unbedingt bei einem " oder ' aufhoerst zu parsen, bzw. nur die laut RFC erlaubten Zeichen matcht. Sonst kann man relativ schnell eine URL wie z.B.
Code:
http://foo.bar/"onclick="document.href='bar.foo';return /**/false;
reinschreiben, und das geht mal so richtig ins Auge.

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 FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#8

AW: [PHP] ereg_replace

  Alt 10. Jun 2010, 19:31
Hi,

ich hatte auf php.net geguckt. Aber wo die Beispiele beginnen habe ich nichts sinnvolles mehr erwartet und nicht noch weiter runter gescrollt. Warum kann das nicht oben dabei stehen?

Falls wer Copy&Pasten will:
PHP-Quellcode:
$text = preg_replace("#(^| |\n)([[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/])#","\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $text);
$text = preg_replace("#(^| |\n)(www([.]?[a-zA-Z0-9_/\-~])*)#", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $text);
[edit]
Weiter oben im Code steht

PHP-Quellcode:
$text = str_replace("<", "<", $text);
$text = str_replace(">", ">", $text);
$text = str_replace('"', "&quot;", $text);
$text = str_replace("'", "&apos;", $text);
Demzufolge sollte ein " nichts schlimmes verursachen. Nur &apos; funktioniert im IE nicht (obwohl es in XML-Standard definiert ist und XHTML ist XML), da muss ich schnell nochmal suchen... gefunden: & #39 ;
[/edit]


Gruß
Felix
Felix Alter

Geändert von FAlter (10. Jun 2010 um 19:39 Uhr) Grund: Antwort von alcaeus übersehen; Leerzeilen zu viel sowie Lösung zu &apos;; jetzt hat der das ' als ' dargestellt
  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 00:17 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