|
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 |
|
|
|