Versuchen, einige Web-Scraping zu tun, aber Probleme zu verstehen, wie PHP HTML-Tags analysiert. Ich bin momentan nicht auf meinem Webserver, also teste ich den Code online. Bei http://phptester.net/ meinen Code ist dies:PHP und HTML-Tags
<?php
$start = "<title>";
$end = "</title>";
$data = "<title>this is a test </title>";
echo $start . " " . $end . " " . "<br>";
echo $data . "<br>";
echo strlen($start) . "<br>";
echo htmlspecialchars($data) . "<br>";
$data = stristr(htmlspecialchars($data), htmlspecialchars($start));
$data = substr(htmlspecialchars($data), strlen($start));
if($data===false){
echo 'string not found';
}
else{
echo $data;
}
Jetzt ein paar Beispiel Ein- und Ausgänge.
Input
$start="<title>"
$end="</title>"
Output
(blank line)
(blank line)
7
<title>this is a test </title>
;title>this is a test </title>
Input
$start=<title>
$end=</title>
Output
<title> </title>
(blank line)
13
<title>this is a test </title>
string not found
Ändern
$data = stristr(htmlspecialchars($data), htmlspecialchars($start));
zu
$data = stristr(htmlspecialchars($data), $start);
und Wiederholung der Prüfungen.
Input
$start="<title>"
$end="</title>"
Output
(blank line)
(blank line)
7
<title>this is a test </title>
string not found
Input
$start="<title>"
$end="</title>"
Output
<title> </title>
(blank line)
13
<title>this is a test </title>
>this is a test </title>
Ich hatte erwartet, dass der letzte funktioniert. Ich denke, es wird auf einem tatsächlichen Web-Server, weil es scheint, dass dieser Online-PHP-Tester fügt zusätzliche 4 Zeichen am Anfang der Zeichenfolge, die die letzten vier vor dem Löschen hält.
Ich ging und versuchte http://sandbox.onlinephpfunctions.com/ nächsten und die ursprünglichen Strings ohne irgendwelche htmlspecialchar Funktionen funktionierte genau so, wie ich erwartet hatte. Ich habe die gleiche Version in beiden verwendet. Jetzt bin ich sehr verwirrt.
Entschuldigung für die lange Post. Wenn jemand mir erklären kann, wie PHP HTML-Tags analysiert, würde ich es sehr schätzen. Vielen Dank.
PHP analysiert HTML nicht zufällig. Um HTML tatsächlich zu analysieren, würden Sie z.B. DomDocument oder SimpleXML-Erweiterungen. Wie du schon sagtest, dein Beitrag ist ziemlich lang, so dass es mir schwer fällt, herauszufinden, woran du versuchst. –
php hat keine ahnung was html ist. Es ist nur Text. Aber da Sie Ihren 'scrape_str' auskommentiert haben, machen Sie tatsächlich Ihren' === false' Test gegen die Ergebnisse von 'substr()', der bei einem Fehler nur false zurückgibt. –
Wenn PHP HTML als nur Text behandelt dann warum liest es