WebWork Magazin - Webseiten erstellen lassen, Online Medien, html

Webhoster, Webhosting Provider und Domain registrieren

Home | Registrieren | Einloggen | Suchen | Aktuelles | GSL-Webservice | Suleitec Webhosting
Reparatur-Forum | Elektro forum | Ersatzteilshop Haushalt und Elektronik


Homepage und Webhosting-Forum

Scripte und Programme für PHP, MYSQL. Diskussionen zur Programmierung im Web. Fragen zu CMS, Blogsoftware, Shops, Newsletter und vielen weiteren Scripten.


Forum » PHP & MySQL » Offene Tags aus String entfernen » Antworten
Benutzername:
Passwort: Passwort vergessen?
Inhalt der Nachricht: Fett | Kursiv | Unterstrichen | Link | Bild | Smiley | Zitat | Zentriert | Quellcode| Kleiner Text
Optionen: Emailbenachrichtigung bei Antworten
 

Die letzten 5 Postings in diesem Thema » Alle anzeigen
von subjective
Nein es ist eigentlich eher selten. Entweder zeigt man dem Benutzer einen Fehler an - weil einfach zumachen ist wohl kaum richtig, man nutzt BBCode, welchen man ehh parsen muss oder man nutzt einen JS-basierenden Editor, welcher ehh alles schließt.
von Mostone
Eigentlich dachte ich, dass das Schliessen von Tags ziemlich häufig notwendig ist, wenn man vom User Input bekommt, der HTML-Formatierungen erlaubt. Im Netz gefunden hab ich folgende Methode, die für mich sehr gut funktioniert:

1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
28: 
29: 
30: 
31: 
32: 
33: 
34: 
35: 
36: 
37: 
38: 
39: 
40: 
41: 
42: 
43: 
44:
// string CloseOpenTags(string string [, string beginChar [, stringEndChar [, string CloseChar]]]);
function closeOpenTags($str, $open = "<", $close = ">", $end = "/", $tokens = "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
{
  $chars = array();
  for($i = 0; $i < strlen($tokens); $i++)
  {
    $chars[] = substr($tokens, $i, 1); }

    $openedTags = array();
    $closedTags = array();
    $tag = FALSE;
    $closeTag = FALSE;
    $tagName = "";

    for ($i = 0; $i < strlen($str); $i++)
     {
     	$char = substr($str, $i, 1);
        if($char == $open) { $tag      = TRUE; continue; }
        if($char == $end)  { $closeTag = TRUE; continue; }
        if($tag && in_array($char, $chars)) { $tagName .= $char; }
        else {
          if($closeTag) {
           if(isset($closedTags[$tagName])) { $closedTags[$tagName]++;   }
           else                             { $closedTags[$tagName] = 1; }
          }
          elseif($tag)
          {
            if(isset($openedTags[$tagName])) { $openedTags[$tagName]++;   }
            else                             { $openedTags[$tagName] = 1; }
          }
         $tag = FALSE; $closeTag = FALSE; $tagName = "";
        }
     }

     while(list($tag, $count) = each($openedTags))
     {
      $closedTags[$tag] = isset($closedTags[$tag]) ? $closedTags[$tag]:0;
      $count -= $closedTags[$tag];
      if($count < 1) continue;
      $str .= str_repeat($open.$end.$tag.$close, $count);
     }

  return $str;
}
von subjective
Es gibt für php auch eine HTMLTidy-Extension - sonst ist halt Handarbeit angesagt.
von HoRnominatoR
du koenntest die vorkommen offener tags zaehlen und dann ggf loeschen/auffuellen.
von Mostone
Hallo,

ich habe einen String, aus dem ich momentan mit strip_tags($inStr, $allowedTags) fast alle HTML-Tags entferne. Formatierungen wie bold, kursiv u.ä. bleiben. Nun ist das Problem, dass in dem String auch nicht-geschlossene Tags verbleiben können und damit die Darstellung der restlichen Seite diese Formatierung übernimmt. Wie geht man mit sowas üblicherweise um oder gibt es irgendeine Möglichkeit zu prüfen, ob die HTML-Formatierung korrekt ist?

Danke für jede Hilfe

Nach oben