html title einer url per php auslesen
thomas123
- php
0 kEv*0 Jeena Paradies0 Ashura0 Ashura0 Jeena Paradies0 Ashura
hallo,
ich muss mit php (reine ajax lösung auch ok) den title einer belibigen url auslesen. hab allerdings keine ahnung wie ich das clever lösen kann.
mit fopen kann ich mir die seite nehmen, aber wie komm ich geschickt an den titel ran?
gruß thomas
Hallo,
schonmal daran gedacht mit einer Funktion nach dem title Tag die Datei zu durchsuchen?
Ist zumindest eine Lösung, wenn es sicher auch elegantere Lösungen gibt. Bin nicht der php Experte, aber damit würde ich es versuchen zu lösen.
LG
--
kEv*
----
Hallo,
Wenn du die Seite als String in einer Variable $html_source hast, dann klappt das mit diesem Regex:
preg_match('|<title>([^<]*?)</title>|is', $html_source, $title);
Grüße
Jeena Paradies
Hallo Jeena.
Wenn du die Seite als String in einer Variable $html_source hast, dann klappt das mit diesem Regex:
preg_match('|<title>([^<]*?)</title>|is', $html_source, $title);
Hm, warum eigentlich gleich mit regulären Ausdrücken losfeuern?
So kann es auch gehen:
<?php
$str_html = '<html><head><title>Foo</title></head><body><p>Bar</p></body>'; // Simples HTML-Dokument
$int_start = strpos($str_html, '<title>'); // Position des title-Anfangstags
$int_start += 7; // strlen('<title>') == 7
$int_end = strpos($str_html, '</', $int_start); // Position des title-Endtags
echo substr($str_html, $int_start, $int_end - $int_start); // „Foo“
?>
Einen schönen Sonntag noch.
Gruß, Ashura
Hallo Gunnar™
Kleine Korrektur für den Fall, der eigentlich nicht auftreten darf:
<?php
$str_html = '<html><head><title>Foo</title></head><body><p>Bar</p></body>'; // Simples HTML-Dokument
$int_start = [link:http://de2.php.net/manual/en/function.strpos.php@title=strpos]($str_html, '<title>'); // Position des title-Anfangstags
if ($int_start !== false) {
$int_start += 7; // [link:http://de2.php.net/manual/en/function.strlen.php@title=strlen]('<title>') == 7
$int_end = strpos($str_html, '</', $int_start); // Position des title-Endtags
echo [link:http://de2.php.net/manual/en/function.substr.php@title=substr]($str_html, $int_start, $int_end - $int_start); // „Foo“
}
?>
Eigentlich _muss_ immer ein title-Element vorhanden sein. Eigentlich.
Einen schönen Sonntag noch.
Gruß, Ashura
Hallo,
Kleine Korrektur für den Fall, der eigentlich nicht auftreten darf:
Eigentlich _muss_ immer ein title-Element vorhanden sein. Eigentlich.
Aber wenn man wirklich HTML parsen will, dann müsste man sachen wie
<
TITLE LANG=DE-DE DIR=RTL
>
bar
</TITLE>
auch mit herausfischen, oder nicht? Vor allem die Groß und kleinschreibung, das geht dann mit einem Regulären Ausdruck um einiges einfacher, aber man bräuchte eigentlich einen SGML-Parser, doch für PHP kene ich erst mal keinen.
Grüße
Jeena Paradies
Hallo Jeena.
Aber wenn man wirklich HTML parsen will, dann müsste man sachen wie
<
TITLE LANG=DE-DE DIR=RTL
>
bar
</TITLE>
>
> auch mit herausfischen, oder nicht?
Wo du recht hast …
> Vor allem die Groß und kleinschreibung, das geht dann mit einem Regulären Ausdruck um einiges einfacher, aber man bräuchte eigentlich einen SGML-Parser, doch für PHP kene ich erst mal keinen.
Man könnte die Spielchen mit den Stringfunktionen durchaus noch weiter treiben, aber dann ist fraglich, ob sie überhaupt noch einen Performancevorteil gegenüber einem regulären Ausdruck bieten.
Einen schönen Sonntag noch.
Gruß, Ashura
--
sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
„It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
[[HTML Design Constraints: Logical Markup](http://www.w3.org/History/19921103-hypertext/hypertext/WWW/MarkUp/HTMLConstraints.html)]
Hallo Gunnar™
Man könnte die Spielchen mit den Stringfunktionen durchaus noch weiter treiben, […]
Und es spricht auch eigentlich nichts dagegen, da das title-Element über kein Attribut verfügt, welches das Zeichen „>“ enthalten könnte:
<?php
$str_html = '<html><head><title>Foo</title></head><body><p>Bar</p></body>'; // Simples HTML-Dokument
$int_start = stripos($str_html, '<title'); // Position des Anfangstags
if ($int_start !== false) {
$int_start = strpos($str_html, '>', $int_start); // Terminator des Anfangstags
$int_start += 1; // strlen('>') == 1
$int_end = strpos($str_html, '</', $int_start); // Position des title-Endtags
echo substr($str_html, $int_start, $int_end - $int_start); // „Foo“
}
?>
Dank stripos ist nun auch egal, ob Groß- oder Kleinschreibung.
Ich habe meine Zweifel daran, dass eine Trennung von Anfangszeichen und Name des Elementes erlaubt ist. Zumindest kann ich in der HTML-Spezifikation dazu nichts finden.
Einen schönen Sonntag noch.
Gruß, Ashura
Hallo Ashura,
Ich habe meine Zweifel daran, dass eine Trennung von Anfangszeichen und Name des Elementes erlaubt ist. Zumindest kann ich in der HTML-Spezifikation dazu nichts finden.
Das heißt ja nichts. Hast du dir auch die SGML-Spezifikation angesehen? ;-)
Schöne Grüße,
Johannes
Hallo Johannes.
Hast du dir auch die SGML-Spezifikation angesehen? ;-)
Ja, habe ich, aber verstanden: nein. Wenn sie mir jemand übersetzen könnte …
Einen schönen Montag noch.
Gruß, Ashura
Hallo Gunnar™
Hast du dir auch die SGML-Spezifikation angesehen? ;-)
Laut dem, was ich ich dieser Übersicht entnehmen kann, sind Whitespaces in SGML nach dem Elementnamen erlaubt, jedoch nicht vorher.
Einen schönen Montag noch.
Gruß, Ashura