Home | Registrieren | Einloggen | Suchen | Aktuelles


Forum » PHP & MySQL » Funktion in regulärem ausdruck Antworten
Funktion in regulärem ausdruck

Maasda
Pixelschubser


Beiträge: 18


Ich weiss, dieses Thema gab es hier schonmal, aber ich bin daraus nicht schleu geworden:

Wie bekomme ich es hin, dass in folgendem Code das stück des Ersatzes noch durch die funktion shortURL() gejagt wird?

1:
$post[text] = preg_replace("#(?<!<a href=\")(?<!<img src=\")((http|ftp)+(s)?:\/\/[^<>\s]+)#si", "<a href=\"\\1\"  onclick=\"return PopUp(788,516,this.href)\">".shortURL("$1")."</a>", $post[text]);



---
by Maasda/Julian
http://www.maasda.de

  Profil   Website   Editieren   Zitieren

subjective
Forenheld


Beiträge: 848


Nutze preg_replace_callback - dort kannst du eine Funktion angeben, welche für jeden Treffer aufgerufen wird. Sie bekommt den Treffer als Array übergeben. Du mußt sie also selbst definieren. Im Gegensatz zum Modifier e (evaluate) in preg_replace verzettelt man sich nicht so sehr beim Escaping der diversen Quotes (JS, HTML, PHP).

---
Weaverslave

  Profil   Website   Editieren   Zitieren

Maasda
Pixelschubser


Beiträge: 18


Danke, hat geklappt!

preg_replace_callback:
1:
$post[text] = preg_replace_callback("#(?<!<a href=\")(?<!<img src=\")((http|ftp)+(s)?:\/\/[^<>\s]+)#si", "shortLink", $post[text]);


Link-kürz-Funktion:
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15:
// Link-Kuerzen
function shortLink($url)
{
if(strlen(utf8_decode($url[1])) > 50)
{
$linktext = substr($url[1],0,25)."...".substr($url[1],strlen(utf8_decode($url[1]))-20);
}
else
{
$linktext = $url[1];
}

$link = "<a href=\"".$url[1]."\"  onclick=\"return PopUp(788,516,this.href)\">".$linktext."</a>";
return $link;
}


---
by Maasda/Julian
http://www.maasda.de

Diese Nachricht wurde geändert von: Maasda
  Profil   Website   Editieren   Zitieren

subjective
Forenheld


Beiträge: 848


Fein Fein

Da du für Variablen den String immer unterbrichst könntest du außen rum auch Single Quotes/Hochkomma verwenden. Damit würdest du dir nochmal eine Runde Escaping der Double Quotes für die HTML-Attribute ersparen. Oder du nutzt Single Quotes für die HTML-Attribute.

---
Weaverslave

  Profil   Website   Editieren   Zitieren

Maasda
Pixelschubser


Beiträge: 18


Sind Single-Quotes für HTML-Attribute denn noch XHTML 1.1 (Strict) valid? Ich dachte, man dürfte nur Double-Quotes verwenden

Wie dem auch sei, die HTML-Attribute mach in allen Projekten mit Double-Quotes.

---
by Maasda/Julian
http://www.maasda.de

Diese Nachricht wurde geändert von: Maasda
  Profil   Website   Editieren   Zitieren

subjective
Forenheld


Beiträge: 848


Es ist beides erlaubt. Sowohl Single wie auch Doublequotes.

---
Weaverslave

  Profil   Website   Editieren   Zitieren

Maasda
Pixelschubser


Beiträge: 18


Aber hab ich durch das Escaping-sparen irgendwelche nennenswerten Performance Steigerungen? Kann ich mir nicht vorstellen.

Sonst: Hab mich dran gewöhnt, das Escaping immer durchzuziehen, und sollten keine triftigen Gründe dagegen sprechen, behalte ich das bei. Is halt mein Style

---
by Maasda/Julian
http://www.maasda.de

  Profil   Website   Editieren   Zitieren

languitar
Foren-Team


Beiträge: 2795


Du köntnest auch eifnach in PHP einfache Anführungszeichen benutzen. Macht dein (leider) eingebetteten HTML-Code leichter zu lesen.

---
Take a look here!
Lichtblick - Einblick - Ausblick

  Profil   E-Mail   Website   Editieren   Zitieren

subjective
Forenheld


Beiträge: 848


Jep es geht nur um die Lesbarkeit des Quellcodes - Escaping verringert diese stark.

Allerdings finde ich eingebettetes HTML durchaus sinnvoll - nicht jede kleine Anwendung benötigt ein Templatesystem. Wenn man viel mit CSS-Klassen arbeitet, kann man später auch so noch jede Menge formatieren. Ein Templatesystem ist bei kleinen Anwendungen unnötiger Overhead.

---
Weaverslave

  Profil   Website   Editieren   Zitieren

Maasda
Pixelschubser


Beiträge: 18


Wie würde denn so ein Templatesystem aussehen?

Erst durch PHP sämtlichen Content in Variablen schreiben und dann in ein Template einfügen? Das würde doch mehr RAM kosten, oder?

---
by Maasda/Julian
http://www.maasda.de

  Profil   Website   Editieren   Zitieren

subjective
Forenheld


Beiträge: 848


Richtig - Templatesysteme sind zusätzlicher Overhead - sowohl RAM wie auch Rechenleistung. Bei größeren Anwendungen senken sie jedoch den Entwicklungs- und Pflegeaufwand enorm. Wenn man etwas größere Anwendungen wiederverwenden/weitergeben will, kommt man um ein Templatesystem nicht herum. Um die Geschwindigkeit zu steigern werden oft Ausgabe-Caches verwendet, welche das erzeugte HTML speichern.

Man könnte z.B. Smarty verwenden. Hier werden die Templatedateien zu PHP compiliert, was die Ausführung beschleunigt. Eine Alternative ist eine der XSLT-Extensions für PHP. Hier hat man den Vorteil einer standardisierten Syntax und sehr klarer Trennung des Layouts von der Anwendunglogik.

---
Weaverslave

  Profil   Website   Editieren   Zitieren

Maasda
Pixelschubser


Beiträge: 18


Ich denke, es ist zwar gut, wenn der Code auch für andere les- und nachvollziehbar ist und bleibt, doch solange ich an diesem Projekt code, werde ich es ersteinmal so lassen bzw. weiter so machen, ohne Template-System also, denn hier kommt es vorallem auf Performance an.
Wenn das Projekt fertig ist (bzw. die erste Version), und stabil läuft, kann ich mir Gedanken darüber machen, wie ich den Quellcode aufräumen kann, sodass ich dann schneller und leichter z.B. neue Addins schreiben kann. Doch das hat im Moment bei mir eine niedrigere Priorität als das Zustandebringen des Projekts.

Auf jeden Fall nochmals vielen Dank für eure Hilfe, hier stösst man mal wirklich auf Leute, die sich auch im Hintergrund auskennen (nennt man auch Experten ^^).

Julian

---
by Maasda/Julian
http://www.maasda.de

  Profil   Website   Editieren   Zitieren

subjective
Forenheld


Beiträge: 848


Ein Templatesystem nachträglich in ein bestehendes System zu integrieren ist allerdings ein ziemlich hoher Aufwand.

---
Weaverslave

  Profil   Website   Editieren   Zitieren

Maasda
Pixelschubser


Beiträge: 18


Das wäre es dann jetzt allerdings auch schon.
Ich würde es dann warscheinlich nocheinmal von Grund auf programmieren, um es dann auch an die neuesten Standards anzugleichen usw.
Im Moment ist mein PHP einfach so gestaltet, dass es funktioniert, aber zum Beispiel kein OOP mit drinnen oder so. Das müsste dann sowieso in einem neuen Anlauf passieren.

---
by Maasda/Julian
http://www.maasda.de

  Profil   Website   Editieren   Zitieren
 

Antworten
Nach oben