ERLEDIGT
NEIN
NEIN
ANTWORTEN
5
5
ZUGRIFFE
486
486
EMPFEHLEN
-
26.04.12 23:32 #1
Rookie
- Registriert seit
- Jul 2007
- Beiträge
- 5
Hi,
ich verzweifle hier grad an einem Problem und ich hoffe ihr könnte mir helfen.
Wahrscheinlich ist es so banal, dass ich den Baum vor lauter Wald nicht sehe
Die Sache ist die:
Ich lese mir den Quellcode einer Seite aus,
schneide den Großteil mit stripos und substr weg, bis mir das gecuttete übrigbleibt:
Jetzt will ich mit preg_match_all die Inhalte einer Tabelle auslesen, und da kommt jetzt das Problem.PHP-Code:$src_code = htmlspecialchars(file_get_contents($url));
/* trari trara schnipp schnapp*/
$src_code_cut = substr($src_code, $start, $laenge);
Der String $src_code_cut enthält nur noch den html-code mit der Tabelle, also:
genau so steht es auch da, überHTML-Code:<table> ........ </table>
echo $src_code_cut.
Wenn ich jetzt aber das als Quell-String für den preg_match_all eingebe:
Und die Inhalte des Arrays auslesen will, dann kommt nix.PHP-Code:preg_match_all("|<th[^>]+>(.*)</t[^>]+>|U", $src_code_cut, $ausgabe, PREG_PATTERN_ORDER);
Mache ich es aber so:
dann kommen die Richtigen Ergebnisse.PHP-Code:preg_match_all("|<th[^>]+>(.*)</t[^>]+>|U", '<table> .... </table>', $ausgabe, PREG_PATTERN_ORDER);
Was muss ich jetzt also mit meinem $src_code_cut tun, damit es von preg_match_all gelesen werden kann?
Danke schonmal
-
27.04.12 00:04 #2
Was gibt dir denn var_dump() aus? Ansonsten wäre der Teil zwischen deinem ersten Skriptschnipsel und deinem zweiten interessant.
Ich mag:
- positive Bewertungen meiner Beiträge
- ein Danke für meine hilfreichen Beiträge
Dabei kann ich dir helfen: PHP --- Javascript --- Ruby --- Coffeescript --- CSS --- HTML --- Webtechnologien --- Shell --- UNIX
... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.
-
27.04.12 00:27 #3
Rookie
- Registriert seit
- Jul 2007
- Beiträge
- 5
var_dump($src_code_cut) gibt aus:
string(laenge) ""
und dahinter die Tabelle, aber von html interpretiert und nicht als code.
Was bei mir genau passiert ist das:
Da gibt es jetzt wie gesagt keine Ausgabe für $ausgabe[][].PHP-Code:$start = htmlspecialchars('<table>');
$end = htmlspecialchars('</table>');
$src_code = htmlspecialchars(file_get_contents($url));
$start_pos = stripos($src_code, $start);
$end_pos = stripos($src_code, $end);
$src_code_cut = substr($src_code, $start_pos, strlen($src_code)-((strlen($src_code)-$end_pos)+$start_pos));
preg_match_all("|<th[^>]+>(.*)</t[^>]+>|U", $src_code_cut, $ausgabe, PREG_PATTERN_ORDER);
echo $ausgabe[0][0] . "<br>";
echo $ausgabe[0][1] . "<br>";
echo $ausgabe[0][2] . "<br>";
echo $ausgabe[0][3] . "<br>";
echo $ausgabe[0][4] . "<br>";
echo $ausgabe[0][5] . "<br>";
Ersetzt man im preg_match_all das $src_code_cut mit dem String
'<table>.....</table>'
Dann geht es Problemlos.
Ich hatte es auch schon mit htmlspecialchars($src_code_cut) probiert, aber dann gibt es auch keine ausgabe und im Vardump ist dann eh alles wirr.
-
27.04.12 08:13 #4
Dein Problem liegt bei htmpspecialchars() - das verändert die Größer-Als und Kleiner-Als-Zeichen. Damit läuft dein Regex natürlich ins Leere. Also alle wegmachen und zum Schluss über das fertige Ergebnis laufen lassen, falls du htmpspecialchars() wirklich benötigen solltest. Sollen die Daten denn überhaupt in ein Eingabefeld?
Außerdem hast du ein Problem in deinem Regex:
Das Plus-Zeichen muss ein Stern sein, sonst findest du nur th-Tags, die auch Attribute haben.PHP-Code:preg_match_all("|<th[^>]+>(.*)
-
27.04.12 23:32 #5
Rookie
- Registriert seit
- Jul 2007
- Beiträge
- 5
Wenn ich htmlspecialchars() wegmache, dann gibt es leider auch keine Ergebnisse.
Dann kann er nichtmal stripos und substr ausführen.
Ich bekomm hier gleich die Kriese
Das mit den Atributen ist schon ok so
aber dankeGeändert von sowas aber auch o_ (27.04.12 um 23:36 Uhr)
-
28.04.12 08:17 #6
Du bist Dir auch sicher, dass Dein Regex richtig ist?
Und warum machst Du erstmal ein String-Funktionen-Kauderwelsch, wenn Du gleichermaßen Regex in einer Zeile verwenden kannst, uU mit weniger Problemen?
Ich nehme als Auslesebasis das table/th-Beispiel von selfhtml
http://de.selfhtml.org/html/tabellen/aufbau.htm
und lasse lediglich zwei Regex rüberlaufen und bin schon am Ziel.
mfg chmeePHP-Code:# wir suchen nur einen table-Fund.
$regex = "#<table(.*?)>(.*?)</table>#ims";
preg_match ($regex, $string, $outputA);
# und dann suchen wir mehrere th
$regex = "#<th>(.*?)</th>#ims";
preg_match_all ($regex, $outputA[1], $outputB);
foreach($outputB[1] as $thFund)
{
echo $thFund."<br/>";
}
Mein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
Benutzt den DANKE-Knopf oder bewertet den Beitrag
"GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
-> Regexp <- -> php <- -> Javascript <-
Ähnliche Themen
-
TreeMap<String,HashMap<String,String>> sortieren
Von ChantalM im Forum JavaAntworten: 4Letzter Beitrag: 07.02.11, 16:32 -
public String replaceAll(String regex, String replacement) und das $-Zeichen
Von takidoso im Forum JavaAntworten: 5Letzter Beitrag: 22.11.10, 17:31 -
PHP String für Javascript String Escapen. (String über mehrere Zeilen)
Von Lukasz im Forum PHPAntworten: 2Letzter Beitrag: 04.09.06, 12:07 -
Zeichenanzahl (Zahl und kein String) in einem Eingabefeld überprüfen.
Von messmar im Forum PHPAntworten: 3Letzter Beitrag: 24.09.04, 12:46 -
[C++]Als 'string' deklarierte Funktion gibt kein Array zurück
Von Fabian Hofmann im Forum C/C++Antworten: 12Letzter Beitrag: 09.11.03, 22:06




Zitieren

Login