Ankündigung

Einklappen
Keine Ankündigung bisher.

HTML Parser

Einklappen

Neue Werbung 2019

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

  • 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


  • #2
    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.
    Gruss
    L

    Kommentar


    • #3
      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?

      Kommentar


      • #4
        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>";

        Gruss
        L

        Kommentar

        Lädt...
        X