hi Boecki91, hi all
vielen Dank für die schnelle Antwort. Das ist echt ein tolles Board. Ich bin begeistert. So macht der Einstieg in ein neuen Code Spaß. Ich hab auch schon an
preg_match_all() gedacht. Ich werd das mal heute Nacht noch ausprobieren. Den Code zusammenbauen und ein paar Tests machen.
Boecki91 hat geschrieben: Ich weiß nicht genau was du vor hast aber preg_match_all() sollte dir helfen.
Nochmals Danke! Ich probier mal einige Sachen. Also ich hab etwas perl-erfahrung und etwas PHP.
Update: Hab nochwas gefunden; im viewforum.php file, Zeile 257: da gibts die Methode:
Die hat glaub ich alle Daten die auf dem Forum gezeigt werden. Ich künnte eine Funktion daraus machen - oder den Code nach dieser Metode setzen. Was meint ihr denn?
Ein anderer Ansatz - ist dieser hier:
Code: Alles auswählen
function cleanup ($string) {
// falls magic quotes on
if (get_magic_quotes_gpc())
{
$string = stripslashes($string);
}
$string = addslashes($string);
$string = strip_tags($string);
// "--","#";";","`","/" Ausfiltern von SQL-Statements
$string = str_replace(array("--","- -","#",";","`","/","<",">","{","}","[","]"),array("","","","","","","","","","","",""),$string);
// - mit Leerzeichen dazwischen (SQL-Kommentare!)
$string = preg_replace('#-\s+-#i',"",$string);
return $string;
} // end function cleanup
function checkName ($string) {
// $name am Anfang Buchstabe; keine Zahlen und Nicht-Wortzeichen; dann
// beliebig viele Buchstaben, Bindestriche, Leerzeichen und Punkte
if (preg_match("/^[^\W\d_]([^\W\d_]|[\-\'\s\.\ä\ö\ü\Ä\Ö\Ü\ß])*$/", stripslashes($string)))
{
return true; // OK
}
Hmm,.. und dann alles an die Datenbank übergeben - in einem Array.
Apropos: Hier noch einige Denkansätze, aber gerade der Text des Posts könnte sich als schwierig erweise, da er von keinerlei
html/php codezeichen umrandet ist.
Code: Alles auswählen
/<td width="\d+" align="\w+" valign="\w+" class=".*"><span class="name"><a name="\d+"></a><b>(.*)</b></span><br /><span class="postdetails">Mitglied<br /><br /><br />Anmeldedatum: (.*)<br />Beiträge: (.*)<br />/
Resultat: Subpattern 1 liefert den Usernamen, Subpattern 2 das Anmeldedatum des Users und Nr 3 die Beitragsanzahl.
Code: Alles auswählen
/\s+<td width="100%"><a href="viewtopic.php?p=\d+#\d+"><img src=".*" width="\d+" height="\d+" alt="Beitrag" title="Beitrag" border="\d+" /></a><span class="postdetails">Verfasst am: (.*)<span class="gen"> </span> Titel: (.*)</span></td>/
Resultat: Subpattern1 ist das der Timestamp Nr2 der Titel.
Hmm, hab grad nicht genau überprüft ob Metazeichen & sonst. Zeichen vorhanden sind, die mit einem Backslash gecapt werden müssen.
^ $ + ? . * ( ) [ ] { } / \ |
soweit das hier: Was meint ihr denn dazu!?
Apropos HTML/PHP Code: ist ja immer voll davon, müsste man also noch rausnehmen. Hmmm ich guck nochmals nach...
Freu mich von euch zu hören.
lg Apollo
PS; Als phpBB-Anfänger hab ich schon mal da nachgesehen - bei Naderman:
http://olympuswiki.naderman.de/Parsing_text
Apropos Regex: hab mir das mit dem REGEX - und seiner Ausführung mal angesehen. Also, kann ich den oben beschriebenen Regex denn in die preg_macht_all ( mit oder ohne all) einbauen? Geht das denn!? Also, ich habe das bei einem stoebern gefunden.
http://php-wiki.de/index.php/Function.preg-match-all zu preg_match_all:
(PHP 3>= 3.0.9, PHP 4 , PHP 5) preg_match_all -- Führt eine umfassende Suche nach Übereinstimmungen mit regulärem Ausdruck durch
eine Beschreibung: int preg_match_all ( string Suchmuster, string Zeichenkette, array Treffer [, int Flags [, int Versatz]])
Durchsucht Zeichenkette nach allen Übereinstimmungen mit dem in Suchmuster angegebenen regulären Ausdruck und legt sie in der durch Flags festgelegten Reihenfolge in Treffer ab. Nachdem die erste Übereinstimmung gefunden wurde, wird die nachfolgende Suche jeweils am Ende der letzten Übereinstimmung fortgesetzt. Flags kann eine Kombination folgender Flags sein (beachten Sie, dass es keinen Sinn hat, PREG_PATTERN_ORDER zusammen mit PREG_SET_ORDER zu verwenden):
http://php-wiki.de/index.php/Function.preg-match-all
Beispiel 2. Zusammen gehörende HTML-Tags finden (gierig)
Code: Alles auswählen
<?php
// Das \\2 ist ein Beispiel für Rückreferenzierung. Es teilt pcre mit, dass
// der reguläre Ausdruck mit dem für das zweite Klammerpaar, also in diesem
// Fall mit dem für ([\w]+) gefundenen Ausdruck selbst übereinstimmen muss.
// Der zusätzliche Backslash wird wegen der doppelten Anführungsstriche
// benötigt.
$html = "<b>fett gedruckter Text</b><a href=howdy.html>klick mich an</a>";
preg_match_all("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $html, $treffer);
for ($i=0; $i< count($treffer[0]); $i++) {
echo "gefunden: " . $treffer[0][$i] . "\n";
echo "Teil 1: " . $treffer[1][$i] . "\n";
echo "Teil 2: " . $treffer[3][$i] . "\n";
echo "Teil 3: " . $treffer[4][$i] . "\n\n";
}
?>
Dieses Beispiel erzeugt dann:
gefunden: <b>fett gedruckter Text</b> Teil 1: <b> Teil 2: fett gedruckter Text Teil 3: </b> gefunden: <a href=howdy.html>klick mich an</a> Teil 1: <a href=howdy.html> Teil 2: klick mich an Teil 3: </a>
Also es geht darum, ob ich das so machen kann, wie hier beschrieben
http://php-wiki.de/index.php/Function.preg-match-all - mit preg_match eben, oder mit preg_match all!?
BTW: Das hier geht nicht:
Code: Alles auswählen
// Parse die message, das subject die user und die posting time
$message = censor_text($row['post_text']);
// hier mal den bbcode parsen
if ($row['bbcode_bitfield'])
{
$bbcode->bbcode_second_pass($message, $row['bbcode_uid'], $row['bbcode_bitfield']);
}
$message = bbcode_nl2br($message);
$message = smiley_text($message);
if (!empty($attachments[$row['post_id']]))
{
parse_attachments($forum_id, $message, $attachments[$row['post_id']], $update_count);
}
echo $message;
...