Alle Verweise aus HTML Datei filtern?

Alle Verweise aus HTML Datei filtern?

am 14.04.2008 00:17:59 von Christian Franzen

Hi!

Ich hab mal wieder ein kleines Problem. Ich lade mit http_get() den HTML=20
Code einer Webseite und ich möchte nun aus dieser Datei alle Verweise=20
filtern, also alles auf das mit href=3D'' oder src=3D'' usw. verwiesen wird=
..=20
Dabei sollen sowohl Verweise auf externe Seiten (http://www.test.de) als=20
auch relative Verweise (images/test.gif) herausgefiltert werden. Ich hab=20
schonmal an preg_match_all() gedacht, aber wollte vorher mal Fragen ob=20
ihr eine bessere Idee habt oder sowas vielleicht sogar schonmal=20
gebastelt habt und mir ein paar Tipps geben könnt? Ich freu mich über=
=20
jede Anregung.

mfg Xion

Re: Alle Verweise aus HTML Datei filtern?

am 14.04.2008 12:29:54 von Ulf Kadner

Christian Franzen wrote:

> Ich hab mal wieder ein kleines Problem. Ich lade mit http_get() den HTML
> Code einer Webseite und ich möchte nun aus dieser Datei alle Verweise
> filtern, also alles auf das mit href='' oder src='' usw. verwiesen wird.
> Dabei sollen sowohl Verweise auf externe Seiten (http://www.test.de) als
> auch relative Verweise (images/test.gif) herausgefiltert werden. Ich hab
> schonmal an preg_match_all() gedacht, aber wollte vorher mal Fragen ob
> ihr eine bessere Idee habt oder sowas vielleicht sogar schonmal
> gebastelt habt und mir ein paar Tipps geben könnt?

Wenn sichs dabei um gültiges XML (also XHTML) handelt würde ich das über
XML-Funktionalitäten mit PHP lösen. (z.B.: über XPath)
Evtl. auch vorher z.B. mit Tidy nach XHTML konvertieren.

Ansonsten halt Regex.

MfG, Ulf

Re: Alle Verweise aus HTML Datei filtern?

am 14.04.2008 20:55:52 von Nicolas Sell

Hey Christian!
Also ich denke, dass das Sinnvolste ein RegEx wäre. Dieser hier sollte es
tun:

preg_match_all('#(href|src)="(.*?)"#', $html, $matches);

In $matches[2] sitzen dann alle Verweise.
Viel Spaß

Keenora

Re: Alle Verweise aus HTML Datei filtern?

am 14.04.2008 21:55:46 von Ulf Kadner

Nicolas Sell wrote:
> Hey Christian!
> Also ich denke, dass das Sinnvolste ein RegEx wäre. Dieser hier sollte es
> tun:
>
> preg_match_all('#(href|src)="(.*?)"#', $html, $matches);

du vergist href|src='value'
du vergist href|src=value

MfG, Ulf

Re: Alle Verweise aus HTML Datei filtern?

am 15.04.2008 10:36:49 von David Fuhr

Ulf Kadner wrote in
news:fu0cn4$78h$00$2@news.t-online.com:

> Nicolas Sell wrote:
>
>> Also ich denke, dass das Sinnvolste ein RegEx wäre. Dieser hier
>> sollte es tun:
>>
>> preg_match_all('#(href|src)="(.*?)"#', $html, $matches);
>
> du vergist href|src='value'
> du vergist href|src=value

Außerdem sollte das href|src ja auch in einem Tag stehen...

mit '#<([^>]+)(href|src)=(\'|")?([^\3]*)\3#iU' erwischst du zumindest
alle ' und ". Für die ohne Anführungszeichen fällt mir grad auf die
Schnelle nichts ein (außer nem 2. preg). Aber jemand anderes weiß da
bestimmt Rat.

Gruß
David

Re: Alle Verweise aus HTML Datei filtern?

am 15.04.2008 10:37:43 von David Fuhr

David Fuhr wrote in
news:BOZMj.456$9W3.32184@se2-cb104- 9.zrh1.ch.colt.net:

> Ulf Kadner wrote in
> news:fu0cn4$78h$00$2@news.t-online.com:
>
>> Nicolas Sell wrote:
>>
>>> Also ich denke, dass das Sinnvolste ein RegEx wäre. Dieser hier
>>> sollte es tun:
>>>
>>> preg_match_all('#(href|src)="(.*?)"#', $html, $matches);
>>
>> du vergist href|src='value'
>> du vergist href|src=value
>
> Außerdem sollte das href|src ja auch in einem Tag stehen...
>
> mit '#<([^>]+)(href|src)=(\'|")?([^\3]*)\3#iU' erwischst du zumindest
> alle ' und ".

'#<([^>]+)(href|src)=(\'|")([^\3]*)\3#iU' muss es heißen...

Re: Alle Verweise aus HTML Datei filtern?

am 15.04.2008 12:31:48 von Wolfgang Fellger

David Fuhr schrieb:

>Außerdem sollte das href|src ja auch in einem Tag stehen...

Und nicht in einem Kommentar. Und nicht in einem Javascript-Block.
HTML mit regulären Ausdrücken zu 'parsen' ist Sisyphos-Arbeit.

--
Wolfgang Fellger