Deel HTML uitlezen en echo'en

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Martijn Cornips

Martijn Cornips

27/12/2007 04:13:00
Quote Anchor link
Ik heb een externe URL in HTML en wil hier een deel van kopieëren, zonder het bovenste en onderste deel.
Nou weet ik dat je met PHP RSS feeds kunt uitlezen en echo'en op je site, maar is dit ook met een deel HTML mogelijk?

Ik wil alles binnen de eerste <table> en de eerste </table> echo'en.

Ik heb zelf natuurlijk al wat onderzoek verricht, maar kwam niet verder dan een HTML Parser: http://php-html.sourceforge.net/ die volgens mij alleen maar de 'technische' info leest van een pagina.

Is het mogelijk? Of kan ik het vergeten?
 
PHP hulp

PHP hulp

21/11/2024 19:14:46
 
Arend a

Arend a

27/12/2007 05:36:00
Quote Anchor link
Je kan dit scriptje gebruiken om tables te parsen.

Geavanceerdere operaties (ook simpelere) zijn ook met de php Dom extensie te doen:

http://nl3.php.net/dom

Deze bied een javascript achitge interface voor html documenten

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?
$string
= '<table><tr><td>Rij 1 Waarde1</td><td>Rij 2 Waarde 2</td></tr><tr><td>Rij 2 Waarde 1</td><td>Rij 2 Waarde 2</td></tr></table>

<table><tr><td>Tabel 2, Rij 1 Waarde1</td><td>Rij2 Waarde2</td></tr><tr><td>Rij 2 Waarde 1</td><td>Rij 2 Waarde 2</td></tr></table>'
;

preg_match_all('|<table(:\s?.+?)?' . '>(.+?)</table>|i', $string, $aTablesSource);
// Bovenste regel bevat de concatation ' . ' omdat de syntax highlighter anders flipt

$aTablesSource = $aTablesSource[2];
//print_r($aTables);


$aTables = array();
$iTables = 0;
foreach ($aTablesSource as $sRows) {
  preg_match_all('|<tr(:\s?.+?)?' . '>(.+?)</tr>|i', $sRows, $aRowSource);
  $aRowSource = $aRowSource[2];
  $iRows = 0;
  foreach ($aRowSource as $sCells) {
    preg_match_all('|<td(:\s?.+?)?' . '>(.+?)</td>|i', $sCells, $aCellSource);

    //print_r($aCellSource);
    $aCellSource = $aCellSource[2];
    $aTables[$iTables][$iRows++] = $aCellSource;
  }

  $iTables++;
}

print_r($aTables);

?>
 
Martijn Cornips

Martijn Cornips

27/12/2007 05:49:00
Quote Anchor link
Ik zie in je code allerlei tabellen staan, maar volgens mij snap je niet wat ik wil.

Ik heb http://www.extern.nl/schema.html
en http://www.eigen.nl/verzameling.php

Uiteindelijk wil ik eigenlijk zoiets bereiken:
---------
schema.html
<h1>Schema</h1>
<table><tr><td>Uren</td></tr></table>

verzameling.php (output)
meuk <br> meer meuk <br>
<table><tr><td>Uren</td></tr></table>
---------

Ik wil dus een deel van een HTML pagina als het waren 'embedden' in een andere pagina.
 
Jan Koehoorn

Jan Koehoorn

27/12/2007 11:22:00
Quote Anchor link
Hiermee haal je in ieder geval alle tabellen html op uit een pagina. Hoe je verder de precieze tabel pakt die je nodig hebt, mag je zelf uitpluizen ;-)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
    function open_url ($url) {    
        $fp = fopen ($url, 'r');
        $html = '';
    
        if ($fp) {    
            while ($str = fgets ($fp, 8192)) {
                $html .= $str;
            }

            fclose ($fp);
            return $html;
        }

        else {
            return false;
        }
    }


    $string = open_url ('http://www.phphulp.nl/');
    preg_match_all('/\<table.*\>.*\<\/table\>/i', $string, $tables);
    echo '<pre>' . htmlentities (print_r ($tables[0], true)) . '</pre>';
    // die htmlentities is alleen om de html op het scherm goed weer te geven.
    // later mag die er uit

?>
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
 
Arend a

Arend a

27/12/2007 15:49:00
Quote Anchor link
Kleine nit-pick:

Zorg dat je quantifiers (*) non greedy zijn: dus *?.

Anders matched de onderstaande regex van de eerste tot de laatste table, en niet elke afzonderlijke table apart.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
preg_match_all('/\<table.*?\>.*?\<\/table\>/i', $string, $tables);
?>
 

27/12/2007 16:25:00
Quote Anchor link
Mag ik ook een zetje doen? include

schema.html
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
<h1>Schema</h1>
<table><tr><td>Uren</td></tr></table>


verzameling.php (output)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
meuk <br> meer meuk <br>
<?php include 'schema.html'; ?>
Gewijzigd op 01/01/1970 01:00:00 door
 
Martijn Cornips

Martijn Cornips

27/12/2007 16:28:00
Quote Anchor link
Maar dan heb je ook die H1, en ik wil alleen het tabel. Ben al een beetje aan het kloten met die preq_match_all, maar is nog knap lastig.
 
Joren de Wit

Joren de Wit

27/12/2007 16:36:00
Quote Anchor link
Ik weet niet of je deze tutorial al gezien had, maar die is verdomd duidelijk:

Regular Expressions
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.