Highländer
Mitglied
 
Dabei seit: 05.09.2008
Beiträge: 40
 |
|
|
10.09.2008 11:56 |
|
Son Goku
Administrator
    
Dabei seit: 03.12.2006
Beiträge: 812
 |
|
Stimmt.
Ich such jetzt schon bestimmt 30 Minuten an dem RegEx, ich schaff es aber nur deine Domain rauszufiltern, so dass die externen drin bleiben und nur deine verschwinden würden.
So würde dieser RegEx aussehen:
(mit Beispiel von webnutzer.de)
| code: |
/\<a href=\"?(((.*)((\.{1})|(\/{2})))?)webnutzer\.de((\/(.*))|\/?)\"?\>(.*?)\<\/a\>/
|
|
Der Ausdruck "webnutzer\.de" muss noch negiert werden, dann ist es geschafft.
Ich steh bestimmt schon Jahre vor dem Problem ein Teil eines RegEx negieren zu müssen, hab aber nie eine entsprechende Lösung gefunden, die auch funktionieren würde.
Hier eine einfache Lösung:
| code: |
if(strpos($post, "webnutzer.de") !== false) { ... }
|
|
Hier wird einfach nur gesucht, ob deine Domain irgendwo im Text steht und dann wird nicht ersetzt.
Der Nachteil ist hier aber, dass wenn mehrere Links in einem Post stehen und deine Domain ist dabei, werden die anderen nicht maskiert.
Hier wäre allerdings der nächste Lösungsanstz, dass man eine Schleife mit strpos() im Kopf baut. In der Schleife schneidet man x+1 (Länge bis zur Fundstelle + erstes Zeichen danach) mit substr() ab und setzt auf diesen den RegEX an. Dann beginnt der nächste Durchlauf. Nach der Schleife wird der RegEx nochmal geprüft und danach kannste sicher sein, dass nur noch deine Domain drin steht.
Den Code zu bauen hatte ich jetzt keine Zeit bzw. Lust zum testen mehr. Wenn du mich in 3-4 Tagen nochmal dran erinenrst, bastel ich da vielleicht was, obwohl die erste Methode viel eleganter wäre.
Vielleicht findest du ja noch einen, der es schafft meinen Ausdruck zu negieren. Kannst du Lösung dann ja wieder hier posten.
|
|
11.09.2008 21:43 |
|
|