PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Links suchen und ersetzen


Schneidoa
04.01.2007, 22:45:29
Hallo!
Ich habe ein Problem und hoffe, dass ihr mir helfen könnt.
Also ich habe ein Script geschrieben das aus einem HTML-Quellcode alle Links suchen und dann durch einen anderen ersetzen soll. Es funktioniert aber nur mit einem 'einfachen' Link wie z.B
<a href="http://www.google.de" >Google</a>
aber wenn man es mit eine etwas größerem Link versucht z.B
<A onmouseover="**********" onmouseout="********" href="http://www.google.de" target="_blank">Google</A>
geht es nicht mehr.
Woran liegt das?

Hier mein Script:

//In $quellcode steht der HTML-Code
$quellcode_kopie = $quellcode;
preg_match_all("!<a.*?href=\"([^\"]*)\"[^>]*>(.*?)</a>!",$quellcode_kopie,$ergebnisse);

// Alle Links suchen und ersetzen
foreach ($ergebnisse[1] as $link)
{
$stimmt = strspn($link, "http://");
$link_neu = "user_link.php?url=". urlencode($link);

if($stimmt == 7){
$quellcode = str_replace($link,$link_neu, $quellcode);
}

}



Danke!!!

mfg.Schneidoa

xabbuh
04.01.2007, 23:28:31
Meiner Meinung nach müsste der reguläre Ausdruck so aussehen (wenn davon ausgegangen wird, das jedes beliebige Zeichen außer dem Zeilenumbruch im href-Attribut enthalten sein darf):
<?php
$regex = '#\<a.*?href=([\'"]).+?\1.*?\>#';
?>

Schneidoa
04.01.2007, 23:36:25
Danke für deine Antwort aber leider findet das Script jetzt überhaupt kein link mehr.

Hat jemand noch eine Idee?

mfg.Schneidoa

Schneidoa
05.01.2007, 00:09:38
Ich hab mein Script etwas verändert es geht aber immer noch nicht.
Kann mir jemand helfen?



//In $quellcode steht der HTML-Code
$quellcode_kopie = $quellcode;
$pattern = ',<a([^>]+)href="(?!https?://|ftp://|mailto:|news:)([^>"\s]+)",i';
preg_match_all($pattern,$quellcode_kopie,$ergebnisse);

// Alle Links suchen und ersetzen
foreach ($ergebnisse[1] as $link)
{
$stimmt = strspn($link, "http://");
$link_neu = "user_link.php?url=". urlencode($link);

if($stimmt == 7){
$quellcode = str_replace($link,$link_neu, $quellcode);
}

}

Infinity
05.01.2007, 00:16:58
Ich bin noch Anfänger also kann das ein blöde Frage sein, aber so wie ich das verstehe is $ergebnisse doch ein Array oder?? also warum machste dann eine schleife nur für das erste element ($ergebnisse[1])

Infinity