Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] ereg_replace (https://www.delphipraxis.net/152088-%5Bphp%5D-ereg_replace.html)

FAlter 10. Jun 2010 17:18

[PHP] ereg_replace
 
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

Valle 10. Jun 2010 17:23

AW: [PHP] ereg_replace
 
preg_replace aus den PRCE Functions. :-)

Liebe Grüße,
Valle

Matze 10. Jun 2010 17:31

AW: [PHP] ereg_replace
 
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. ;)

DenSchub 10. Jun 2010 17:42

AW: [PHP] ereg_replace
 
Er schreibt doch, das er eine alternative zu ereg_replace und preg_replace sucht:
Zitat:

Zitat von FAlter (Beitrag 1027908)
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.

Valle 10. Jun 2010 17:47

AW: [PHP] ereg_replace
 
Stimmt, Tatsache. :shock:

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

Liebe Grüße,
Valle

rollstuhlfahrer 10. Jun 2010 17:50

AW: [PHP] ereg_replace
 
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

alcaeus 10. Jun 2010 18:14

AW: [PHP] ereg_replace
 
Moin FAlter,

Zitat:

Zitat von FAlter (Beitrag 1027908)
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

FAlter 10. Jun 2010 18:31

AW: [PHP] ereg_replace
 
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("<", "&lt;", $text);
$text = str_replace(">", "&gt;", $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


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:55 Uhr.

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