You are not logged in.

wcf.regNote.message

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

1

Friday, December 30th 2005, 1:14am

Seiteninhalte filtern mit RegEx

so da ich mir jetzt lange genug selber die zähne daran ausgebissen habe brauch ich mal hilfe oder ggf. auch nur nen denkanstoß.

mein problem:
ich habe eine variable $template in welcher der evaluierte inhalt aus einem template steht. dieser inhalt wird nun untersucht und je nachdem verändert.

$regex1 = "/<a href=\"(.*)\.php\"/siU";
$regex2 = "/<a href=\"(.*)\.php\?(.*)\"/iesU";

$template = preg_replace($regex1,"<a href=\"\\1.htm\"",$template);
$template = preg_replace($regex2,'$this->parseUrl("\\2", "\\1")',$template);

das heißt wenn ein link auf php endet wird er umgeschrieben in einen htm link und sofern noch variablen übergeben werden wird diese ausgabe noch ein wenig weiter verändert.

funktioniert recht gut das ganze ... allerdings nur solange wie im template kein code der eigentlich auf der seite angezeigt werden soll enthalten ist. der inhalt des templates ist ja im normalfall eine html seite. dort kann ich ja z.b. php code einfach so ausgeben lassen um ihn auf der seite darzustellen. ist dies der fall so darf innerhalb dieser bereiches aber auf keinen fall etwas verändert werden.

sehen kann man das problem wenn man hier im board als gast unterwegs ist und irgend ein thema aufmacht welches code zeilen enthällt. man bekommt nurnoch fehlermeldungen da was umgeschrieben wird was nicht umgeschrieben werden darf.

lange rede kurzer sinn ...

wie kann ich in folgendem beispiel erreichen das der rot markierte teil in jedem fall in ruhe gelassen wird und der rest bearbeitet wird?

Quoted

Test blabla bar foo <a href="link.php">link</a>blabla <a href="http://www.googel.de">Googel</a> blabla test blubb


mal angenommen dieses beispiel steht in meiner variable $template dann könnte ich ja sagen
if(!preg_match("/www\..*/i",$template)) {
umschreiben
}

nur das würde ja bedeuten egal wo www steht es wird in dem fall nie umgeschrieben. ich müsste also irgendwie bestimmte abschnitte in dem template umschreiben oder keine ahnung wie.

wär für jeden vorschlag dankbar!
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

badmoon2049

Intermediate

Posts: 188

Location: Leipzig

Occupation: Azubi

  • Send private message

2

Friday, December 30th 2005, 4:26pm

ich bin nicht so gut im regexn ;)

das würde ja bedeuten egal wo www steht es wird in dem fall nie umgeschrieben.

Quoted


if(!preg_match("/www\..*/i",$template)) {
umschreiben
}


dann müsste doch

Source code

1
2
3
if(!preg_match("/.php">\..*/i",$template)) {
umschreiben
}


verhindern das es umgeschrieben wird weißt was ich meine so recht ist mir es noch nicht klar.

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

3

Saturday, December 31st 2005, 2:00am

ich hab irgendwo ne abwandlung von dem was ich hier im board hab gefunden und damit klappt es jetzt tadellos! gäste können in alle beiträge rein und ich hab bis jetzt noch keinen fehler gefunden.

ich muss allerdings zugeben das ich den regex auch nicht ganz blicke. deshalb die frage ob mir den mal jetzt detailiert erklären kann damit ich ggf. blicke wie das ganze tut und es noch weiter verbessern kann.

hier die beiden zeilen in denen mit den regex gearbeitet wird.

PHP Source code

1
2
    $template preg_replace("/href=\"(^|".str_replace("/","\/",$url2board)."\/)([\w\d]+)\.php\?(.*)\"/iesU",'$this->parseUrl("\\3", "\\2")',$template);
    $template preg_replace("/href=\"([\w\d]+)\.php\?(.*)\"/iesU",'$this->parseUrl("\\2","\\1")',$template);


bitte aber wirklich ganz genau punkt für punkt erklären.
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

CiL

Beginner

Posts: 37

  • Send private message

4

Tuesday, January 24th 2006, 6:29am

ahoi!

Ach Prometheus. Ich dachte du kommst mit regulären Expresions klar?
Gruss Tintentanke :-D

Du willst eine Tutorial über RegEx, was dort was bedeutet?

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

5

Tuesday, January 24th 2006, 12:30pm

Endlich mal hier her gefunden?

Mit RegEx kenne ich mich schon aus. Das heißt aber nicht das ich damit bis ins hinterletzte Detail klar komme. Ich kann RegEx lesen und auch inzwischen ganz gut interpretieren. Wenn ich allerdings total verschachtelte selbst baun soll tu ich mich irgendwie etwas schwer.
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

CiL

Beginner

Posts: 37

  • Send private message

6

Wednesday, January 25th 2006, 1:59pm

gibt doch mal ein beispiel was dir schwer fallen würde....und wir machen mal zusammen eine kleine guideline

ja endlich gefunden hast mich ja auch nciht verlinkt bei dir :-P

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

7

Wednesday, January 25th 2006, 7:15pm

Quoted

Original von CiLja endlich gefunden hast mich ja auch nciht verlinkt bei dir :-P

Zahlst Du auch wie Stefan 50 ? pro Domain und pro Monat? :P

Ein Beispiel ... hmmm...

OK also

Source code

1
2
3
4
5
6
7
8
<html><head><title>TEST</title></head>
<body>
<h1>Überschrift</h1>
<br><br>
<font face="Tahoma, Arial" size="2">Text Blablubb...</font><br><br>
<a href="http://www.meinedomain.de/test/sub/bla.php?id=2&bla=x&sub=asdf">Link</a><br><br>
<h3>Abschluss</h3>
</body></html>

Nehmen wir an das Beispiel hier wär ein Template und ich möchte jetzt bevor der Output erfolgt mittels RegEx folgendes feststellen.

1. Ist in dem Template ein Link, welche auf keinen Fall zwischen anderen Tags steht außer zwischen span sofern vorhanden.
2. geht der Link auf meine Domain (entweder mit meiner Domain im Link oder relative Angabe)
3. ist es ein php link
4. wurden variablen mit übergeben welche berücksichtigt werden müssen

Das ganze soll so vorgehen, das wenn die vier Punkte erfüllt sind der resultierende umgeschriebene Link dann so ausschaut:
<a href="/test/sub/id/2/bla/x/sub/asdf/bla.html">Link</a>
Zusätzlich muss jetzt die RewriteRule in meiner htaccess aus diesem Link wieder den ursprünglichen machen können, damit ich den Link auch nutzen kann.

Das wäre so ein Härtefall den ich zwar ggf. hin bekomme aber wo ich mich warum auch immer schwer mit tu.
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

wcf.user.socialbookmarks.titel