Ankündigung

Einklappen
Keine Ankündigung bisher.

HTML Parser

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Zabimaru
    hat ein Thema erstellt HTML Parser.

    HTML Parser

    hallo,

    ich möchte auf meine seite gerne bbCodes integrieren und habe mir deshalb einen HTML Parser gebastelt
    funtioniert alles wunderbar, bis auf das umwandeln von Tabellen, welche man wie folgt eingeben kann
    [head] => <th>
    || => </th><th>
    [/head] => </th>

    [row] => <td>
    || => </td><td>
    [/row] => </td>

    Code:

    PHP-Code:
     private function table()
       {
          
    $this->text preg_replace("/\[table\](.*?)\[\/table\]/si""<table>" $this->table_content('\\1') . "</table>"$this->text);
       }
       
       private function 
    table_content($table_content)
       {

          
    $table_content preg_replace("/\[head\](.*?)\[\/head\]/sie""<tr><th>" $this->table_head('\\1') . "</th></tr>"$table_content);
          
    $table_content preg_replace("/\[row\](.*?)\[\/row\]/sie""<tr><td>" $this->table_row('\\1') . "</td></tr>"$table_content);
          
         
          return 
    $table_content;
       }
       
       private function 
    table_head($table_head)
       {
          return 
    str_replace(' || ''</th><th>'$table_head);
       }
       
       private function 
    table_row($table_row)
       {
          return 
    str_replace(' || ''</td><td>'$table_row);
       } 
    parst er mir soweit auch, ich habe mir $table_content (dem ich \\1 übergeben habe) ausgeben und es wird \1 ausgegeben

    müsste er mir mit \\1 eig nicht das ausgeben, was ich in (.*?) (also meine tabelle) stehen habe?

    thx

    Zabimaru

  • lazydog
    antwortet
    Ich habe keine Ahnung, wie man innerhalb von Klassen callbacks aufrufen kann, da diese ja als Strings übergeben werden. Vielleicht ist es einfach, ich habs einfach noch nie gebraucht.
    Im prozeduralen Umfeld ist es relativ einfach, schau die einfach das folgende Beispiel an:
    PHP-Code:
    $text preg_replace_callback("/\[table\](.*?)\[\/table\]/si"'table'$text);

    function 
    table($treffer){
        
    $text "<table>" preg_replace_callback("/\[head\](.*?)\[\/head\]/si"'zeile_head'$treffer[1]) . "</table>";
        return 
    "<table>" preg_replace_callback("/\[row\](.*?)\[\/row\]/si"'zeile_text'$text) . "</table>";
    }

    function 
    zeile_head($treffer){
        return 
    "<tr><th>" str_replace('||''</th><th>'$treffer[1]) . "</th></tr>";
    }

    function 
    zeile_text($treffer){
        return 
    "<tr><td>" str_replace('||''</td><td>'$treffer[1]) . "</td></tr>";

    Einen Kommentar schreiben:


  • Zabimaru
    antwortet
    jetzt hab ich aber noch die frage, wie ich preg_replace_callback einbauen muss?

    einfach das preg_replace durch ein preg_replace_callback ersetzen geht nicht, da schmeißt er mir die Fehlermeldung :

    Warning: preg_replace_callback() [function.preg-replace-callback]: Requires argument 2, '', to be a valid callback in C:\Programme\xampplite\htdocs\inc\HtmlParser.class .php on line 77

    kannst mir da jmd weiterhelfen?

    Einen Kommentar schreiben:


  • lazydog
    antwortet
    Das Problem ist, dass die Funktionen innerhalb von preg_replace aufgerufen werden, bevor preg_replace() selber aufgerufen wird. Ich würde mal versuchen das mit preg_replace_callback() zu lösen.

    Einen Kommentar schreiben:

Lädt...
X