Inhalt von <h1> ausgeben..
Sanny
- php
Hallo,
ich möchte gerne den Inhalt von h1 ausgeben.
Bis jetzt erreiche ich mit
echo strip_tags(stristr($dokument, '<h1>'));
, dass das ganze Dokument, bereinigt seiner Tags, ab der h1 ausgegeben wird.
Wenn ich nun aber versuche, den String bei "</h1>" wieder abzuschneiden:
echo strip_tags(stristr(stristr($dokument, '<h1>'), '</h1>', true));
, (das versuche ich laut http://us2.php.net/manual/en/function.stristr.php auf die gleiche Weise, nur dass ich als zusätzlichen Parameter "true" für "gebe den String VOR </h1> aus" verwende), dann kommt die Warnung:
Warning: Wrong parameter count for stristr() in /hp/aa/aa/tz/www/sternwerfer/slideshow.php on line 33
Was mache ich falsch?
Danke! LG, Sanny
Was mache ich falsch?
Du verwendest die falsche PHP-Version - der dritte Parameter für strstr() oder stristr() ist nicht in jeder PHP-Version enthalte.
Du kannst die Funktion aber mit strpos() und substr() nachbauen
Natürlich kannst du für diese aufgabe auch einen regulären Ausdruck verwenden - preg_match() wäre dann das Mittel der Wahl.
Hallo suit,
echo strtolower(trim(' WINK MIT DEM ZAUNPFAHL INZWISCHEN VERSTANDEN! '));
..ich weiss nicht warum, aber irgendwie hab ich es überlesen. Seltsam. Sorry. Und Danke trotzdem!
Sanny
Hi,
Was mache ich falsch?
Du benutzt ein PHP vor Version 5.3.0.
Cheatah
Hallo,
Ihr beide habt recht. Das habe ich im php-Manual überlesen. Aber wie kann man dann mit einer älteren php-Version einen String VOR einem bestimmten Punkt ausgeben? Ich habe mir da schon einige Funktionen angesehen und komme da auf keinen grünen Zweig.
LG, Sanny
Hi,
Was mache ich falsch?
Du benutzt ein PHP vor Version 5.3.0.
Cheatah
Das habe ich im php-Manual überlesen.
Ein Problem, das bei dir scheinbar immer noch auftritt :)
Aber wie kann man dann mit einer älteren php-Version einen String VOR einem bestimmten Punkt ausgeben? Ich habe mir da schon einige Funktionen angesehen und komme da auf keinen grünen Zweig.
Siehe oben.
Das habe ich im php-Manual überlesen.
Ein Problem, das bei dir scheinbar immer noch auftritt :)
<wink type="zaunpfahl">
Es tritt allgemein (auch hier im Forum) auf, nicht nur in der PHP-Dokumentation :)
</wink>
Hallo Allerseits,
Für den php-Anfänger, der diesen Thread auf der Suche nach Antworten ergoogelt- ich hab die Lösung inzwischen rausgefunden. Im folgenden kleinen Skript wird der Inhalt der obersten H1 der aktuellen Seiten ausgegeben:
<?php
$filename = $_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI']; // das File greift auf sich selbst zu
$fp = fopen($filename, "r+"); // öffne das File mit bestimmten Rechten
$dok = fread($fp, filesize($filename)); // und lese es ein
$a = stristr($dok, '<h'.'1>'); // Das ganze File ab H 1. Der Tag wird so geschrieben, weil das File auf sich selbst zugreift und deshalb ansonsten dieses "H 1" als oberstes "H 1" erkennen würde
$b = stristr($dok, '</h'.'1>'); // Das ganze File ab /H 1.
$dok = str_replace($b, '', $a); // a minus b, sozusagen
$dok = trim(strip_tags($dok)); // irgendwie hauts in den Quellcode haufenweise Leerzeichen und ein Enter, die werden hier und in den folgenden Zeilen noch rausgenommen (wahrscheinlich völlig schlecht programmiert)
$dok = str_replace(' ', '', $dok);
$dok = str_replace('
', '', $dok);
echo $dok;
?>
LG, Sanny
Für den php-Anfänger, der diesen Thread auf der Suche nach Antworten ergoogelt- ich hab die Lösung inzwischen rausgefunden. Im folgenden kleinen Skript wird der Inhalt der obersten H1 der aktuellen Seiten ausgegeben:
Für PHP-Anfänge empfehle ich dann doch die vorgeschlagene Variante mit strpos() und substr(), da sie wesentlich kürzer ist - deine Variante scheint mir nicht sehr ressourcenschonend zu sein :)
Oder aber mit preg_match() - der elegante Weg:
$pattern = '/<h1>(.*)<\/h1>/iU';
$subject = 'foo <h1>bar</h1> baz <h1>qux</h1> quux';
preg_match($pattern, $subject, $matches);
echo $matches[0] . "\n"; // enthält den kompletten Ausdruck - also "<h1>bar</h1>"
echo $matches[1]; // enthält den ersten subpattern, also "foo"
Erklärung zum Suchmuster:
// = Begrenzer für das Muster
. = beliebiges zeichen
+ = mindesten 1x, aber beliebig oft
() = Unter-Muster welches gespeichert wird
i = case-insensitve
U = nicht gierig
Wörtlich:
finde <h1> (bzw. auch H1 weil ja 'i' gesetzt ist) und speichere eine belibige Zeichenkette bis zum unmittelbar nächsten auftreten (wegen des 'U'-Modifikators) von </h1>.
Ohne den Modifikator U kann es aufgrund der Gierigkeit dazu führen, dass "bar</h1> baz <h1>qux" gefunden würde.
Wenn man alle h1-Elemente haben möchte kann man natürlich auch preg_match_all() verwenden.
Für PHP-Anfänge empfehle ich dann doch die vorgeschlagene Variante mit strpos() und substr(), da sie wesentlich kürzer ist - deine Variante scheint mir nicht sehr ressourcenschonend zu sein :)
Hallo suit,
nee, ressourcenschonend ist der Code gar nicht! :)
...... :(
Ist mir im Nachhinein auch aufgefallen. Ich werde es jetzt erstmal lassen (der Quelltext der einzelnen Seiten ist ZIEMLICH kurz) und meinem Chef vorschlagen, dass er mich möglichst früh an die Umsetzung von deiner Lösung läßt.
Danke!!
LG, Sanny
Hallo
Ist mir im Nachhinein auch aufgefallen. Ich werde es jetzt erstmal lassen (der Quelltext der einzelnen Seiten ist ZIEMLICH kurz) und meinem Chef vorschlagen, dass er mich möglichst früh an die Umsetzung von deiner Lösung läßt.
Und das mit ohne "von". *scnr*
Tschö, Auge
Ist mir im Nachhinein auch aufgefallen. Ich werde es jetzt erstmal lassen (der Quelltext der einzelnen Seiten ist ZIEMLICH kurz) und meinem Chef vorschlagen, dass er mich möglichst früh an die Umsetzung von deiner Lösung läßt.
Und das mit ohne "von". *scnr*
Kommt darauf an...
"die Umsetzung von <em>deiner Lösung</em>"
Wer da empfindlich reagiert, ist gewiss kein Schweizer.
mfg Beat
Hallo
... und meinem Chef vorschlagen, dass er mich möglichst früh an die Umsetzung von deiner Lösung läßt.
Und das mit ohne "von". *scnr*
Kommt darauf an...
"die Umsetzung von <em>deiner Lösung</em>"
Wer da empfindlich reagiert, ist gewiss kein Schweizer.
Stimmt. :-)
Nach meinem Sprachempfinden ist es halt "die Umsetzung deiner Lösung".
Aba is ja Wurscht.
Tschö, Auge