Fremde Seite mittels PHP einbinden

blockmarc

Grünschnabel
Hallo,

habe zwar viele Beiträge in diesem Forum durchgelesen und vieles gegoolet, bin bis jetzt aber nicht findig geworden.

Ich möchte in eine bestehende Homepage bestimmte Inhalte fremder Seiten einlesen bzw. anzeigen lassen und würde mich sehr freuen, wenn Ihr mir dabei helfen könntet. Eins gleich vorweg: die Erlaubnis zur Einbindung liegt vor!

Derzeit mache ich es mit iframe. Die Nachteile brauche ich wohl nicht auflisten.

Die einzubindenen Seiten beinhalten eine Tabelle. Ich möchte diese Tabelle ohne Überschriftszeile mit meinen CSS-Formatierungen auf meiner Seite anzeigen lassen.

Wie kann ich es mit PHP umsetzen? Kennt jemand von Euch womöglich ein Tutorial? Oder kann mir ein Paar Tipps geben?

Vielen herzlichen Dank im Voraus!
 
Hi und Willkommen bei tutorials.de :)

Das größte Problem am Ganzen:
Falls es mehrere tables gibt/gene kann, musst du irgendwie erkennen,
welche deinen gewünschten Inhalt hat.
Wie? Hängt von der Seite ab.

Dann...du willst also alles CSS-mäßige etc. wegkürzen?
Trenn die Tabelle in ihre einzelnen Elemente auf, in ein zweidim. Array.
Dann alle <...> wegkürzen (striptags etc.).

Dann brauchst du nur alles mit Schleifen durchgehen
und gibst es zusammen mit deiner Formatierung wieder aus.

Gruß
 
Hallo blockmarc, auch von mir ein Herzliches Willkommen!

Zuerst musst du den Part mit der Tabelle vom restlichen Code extrahieren.
Entweder kannst du das mit einem HTML-Parser versuchen oder mit Suchen & Schneiden ([phpf]strpos[/phpf], [phpf]substr[/phpf]).

Wobei beim Parsen der Quellcode valide sein muss. Das kommt natürlich auf den Parser an, aber ehrlich gesagt scheitert es meistens daran.
 
Und wenn parsen, dann nicht mit strpos() etc sondern mit Regulären Ausdrücken. Gibt die sichereren Ergebnisse
 
Hallo,

vielen Dank für Eure Antworten!

@sheel
Auf der einzubindenden Seite gibt es nur eine einzige Tabelle.

Ehrlich gesagt, hoffte ich etwas aussagekräftigere Antworten zu bekommen, denn ich bin kein Programmierer. Könntet Ihr Eure Antworten vielleicht mit Beispielen erleuchten?

Danke schön!
 
.. Ehrlich gesagt, hoffte ich etwas aussagekräftigere Antworten zu bekommen, denn ich bin kein Programmierer ...
Hallo,
ich bin auch kein Programmierer, aber du hast nun mal deine Frage im PHP-Forum und nicht im Jäger- und Sammler-Forum gestellt.

Überigens könnte man die Tabelle(n) auch mit XSLT extrahieren:
PHP:
<?php

$quelle = 'http://de.selfhtml.org/html/tabellen/anzeige/colspan.htm';
$elementName ='table';

$xslDoc = <<<EOT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" encoding="UTF-8" />
  <xsl:template match="/">
    <root>
      <xsl:apply-templates />
    </root>
  </xsl:template>
  <xsl:template match="$elementName">
    <xsl:copy-of select="." />
  </xsl:template>
  <xsl:template match="text()" />
</xsl:stylesheet>
EOT;

$domDoc = new DomDocument();
$domDoc->loadHTMLFile($quelle);
$xslObj = new DomDocument();
$xslObj->loadXML($xslDoc);
$xsltRes = new XSLTProcessor;
$xsltRes->importStylesheet($xslObj);
$xslOutput = $xsltRes->transformToXML($domDoc);

header('Content-type: text/xml; charset=UTF-8');
echo $xslOutput;
?>
Das hätte den Vorteil, dass man die Tabelle gleich an die richtige Stelle im Template der HTML-Anzeigeseite packen könnte.
 
Hallo hela,

vielen Dank für Deine offene und bebilderte Antwort!

Sicherlich hast Du Recht, aber dieses Forum heißt auch Tutorials und nicht nur Fachforum oder so... Möglicherweise habe ich jedoch ein falsches Verständnis von... Bitte auf jeden Fall um Verständnis.

Dein Beispiel ist recht einleuchtend und vielversprechend, es geht bei mir aber nicht vollständig auf... Wenn ich es in eine HTML-Seite einbinde, dann klappt es nämlich nicht, merkwürdigerweise wird der Code ab der Zeile

Code:
EOT;

von meinem Editor (Dreamweaver) nicht mehr farblich gekennzeichnet und wenn ich die Seite auf meinem (lokalen XAMPP) Server aufrufe bekomme ich nur folgendes angezeigt:

EOT; $domDoc = new DomDocument(); $domDoc->loadHTMLFile($quelle); $xslObj = new DomDocument(); $xslObj->loadXML($xslDoc); $xsltRes = new XSLTProcessor; $xsltRes->importStylesheet($xslObj); $xslOutput = $xsltRes->transformToXML($domDoc); header('Content-type: text/xml; charset=UTF-8'); echo $xslOutput; ?>

Wenn ich jedoch Dein Beispiel als PHP-Seite aufrufe, klappt es, wobei auch hier der Code ab derselben stelle nicht farblich hervorgehoben wird.

Ich weiß leider nicht wo ich suchen soll bzw. wo der Fehler ist... weißt Du es vielleicht?

Herzlichen Dank!
 
Hi

Zur Forenwahl:
Du hast aber gesehen, dass sich hier einige Kategorien befinden, die alle zu tutorials.de gehören?
Da hast du die Falsche erwischt, wenn du nicht programmieren willst.

Zur Datei:
nun, da das PHP ist, musst du es als PHP-Datei aufrufen
Und so funktionierts ja, laut dir.

Das mit der Farbhervorhebung liegt nur an Dreamweaver
und hat für die Funktionalität keinen Einfluss.
Warum der das so macht oder ob man es umstellen kann...
hab DW nicht, kann dazu also nichts sagen.

Zu deinem lokalen XAMPP: Hast du es dort auch als PHP-Datei gemacht?
Wenn dann noch immer eine derartige Ausgabe kommt,
ist der Server falsch eingestellt.

Gruß
 
Zuletzt bearbeitet:
Hallo blockmarc,

sheel hat schon einiges beantwortet, wenn's jetzt doppelt kommt, dann hat das nichts zu bedeuten. :)

Mein oben gezeigtes Beispiel ist ein PHP-Dokument und das kannst du natürlich nicht in ein HTML-Dokument einbinden, umgekehrt ist das möglich. Meine Bemerkung mit dem HTML-Template ist offensichtlich missverständlich: Gemeint ist ein XSL-Template, aus dem das HTML-Ausgabedokument generiert wird.

Im obigen Beispiel ist die Variable $xslDoc das XSL-Template, mit dem allerdings nur die Tabelle(n) als String ausgegeben und im Browser angezeigt werden. Diese Variable ist in der Heredoc-Syntax notiert, die viele Editoren und Anzeigeprogramme mit Syntaxhervorhebung offensichtlich nicht verstehen. Das sollte dich nicht weiter beunruhigen.

Da die Tabellenausgabe ein String ist, könntest du diesen String einfach in dein HTML einfügen. Vielleicht ist das aus folgendem Beispiel ersichtlich, in dem ich aus (leicht geändertem) o.g. Beispiel eine Funktion gemacht habe:
PHP:
<?php
$quelle = 'http://de.selfhtml.org/html/tabellen/anzeige/colspan.htm';

function fremdTabelle($qAddr)
{
/**
 * Kopiert alle Tabellenknoten aus dem Quelldokument und gibt sie als String
 * innnerhalb von DIV-Tags aus.
 */
$xslDoc = <<<EOT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" omit-xml-declaration="yes" indent="yes" encoding="UTF-8" />
    <xsl:template match="/">
        <div><xsl:apply-templates /></div>
    </xsl:template>
    <xsl:template match="table">
        <xsl:copy-of select="." />
    </xsl:template>
    <xsl:template match="text()" />
</xsl:stylesheet>
EOT;
$domDoc = new DomDocument();
$domDoc->loadHTMLFile($qAddr);
$xslObj = new DomDocument();
$xslObj->loadXML($xslDoc);
$xsltRes = new XSLTProcessor;
$xsltRes->importStylesheet($xslObj);
return $xsltRes->transformToXML($domDoc);
}

header('Content-type: text/html; charset=UTF-8');
?>

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Tabellenübernahme</title>
    </head>
    <body>
        <h1>Tabellenübernahme</h1>
        <dl>
            <dt>Quelle:</dt>
            <dd>
                <?php echo '<a href="'.$quelle.'">'.$quelle.'</a>'; ?>
            </dd>
        </dl>
        <hr>
        <?php echo fremdTabelle($quelle); ?>
    </body>
</html>
Und nochmal: Das ist ein PHP-Dokument und gehört auf den Server. Funktioniert auch nur, wenn unter PHP5 die XSL-Erweiterung installiert ist - scheint aber bei dir der Fall zu sein und bei Zweifeln in der phpinfo nachsehen.
 
Zuletzt bearbeitet:
Zurück