ЗЫ. Код работать будет только с ПРАВИЛЬНЫМ html-кодом. То есть Если будет например тег "html>" или "<html" то вылетит с ошибкой. Что внутри тега - однофигственно тк удаляется все от "<" и до ">"
Хм... Я вот тоже задался этой целью... Но моя процедура всё чистит, да-да
Рассчёт на то, что все <> введённые юзером система заменит на спецсимволы, а они восстановятся до нормальных <> следующей процедурой. Работает, я и не мучился с этим
<примитивным> алгоритмом более 10 минут
- Код: Выделить всё
Public Function StripTags(ByVal st As String) As String
'Вырезаем из текста теги и гребаные стили...
Dim i As Long
Dim f1, f2 As Boolean
Dim rez As String
i = 0
f1 = False
f2 = False
rez = ""
For i = 1 To Len(st)
If (Mid(st, i, 1) = "<") Then
f1 = True
ElseIf (Mid(st, i, 1) = ">") Then
f1 = False
ElseIf (Mid(st, i, 1) = "{") Then
f2 = True
ElseIf (Mid(st, i, 1) = "}") Then
f2 = False
End If
If Not (f1 Or f2) And (Mid(st, i, 1) <> ">") And (Mid(st, i, 1) <> "}") Then
If (Asc(Mid(st, i, 1)) <> 10) And (Asc(Mid(st, i, 1)) <> 13) Then
rez = rez + Mid(st, i, 1)
Else
If (Len(rez) > 2) Then If (Asc(right(rez, 1)) <> 10) And (Asc(Mid(rez, Len(rez) - 2, 1)) <> 13) Then rez = rez + vbCrLf
End If
End If
Next i
i = 1
Do While (Mid(rez, i, 1) = Chr(10)) Or (Mid(rez, i, 1) = Chr(13)) Or (Mid(rez, i, 1) = vbCr) Or (Mid(rez, i, 1) = vbLf)
i = i + 1
Loop
rez = right(rez, Len(rez) - i + 1)
StripTags = rez
End Function
И восстановление:
- Код: Выделить всё
Public Function EncryptText(ByVal st As String) As String
'Чиним чатовские закидоны до нормальных символов...
'НИ В КОЕМ СЛУЧАЕ не применять к этой функции СтрипТэгс
' - порежет что надо и что не надо :D
Dim i As Long
Dim rez As String
i = 1
rez = ""
Do While i <= Len(st)
If (Mid(st, i, 4) = ">") Then
rez = rez + ">"
i = i + 4
ElseIf (Mid(st, i, 4) = "<") Then
rez = rez + "<"
i = i + 4
ElseIf (Mid(st, i, 6) = """) Then
rez = rez + Chr(34)
i = i + 6
ElseIf (Mid(st, i, 6) = " ") Then
rez = rez + " "
i = i + 6
ElseIf (Mid(st, i, 5) = "&") Then
rez = rez + "&"
i = i + 5
ElseIf (Mid(st, i, 5) = "­") Then
rez = rez + "-"
i = i + 5
Else
rez = rez + Mid(st, i, 1)
i = i + 1
End If
Loop
EncryptText = rez
End Function
- Код: Выделить всё
Do While Not EOF(1)
Line Input #1, s
txt = txt + StripTags(s)
Loop
txt = EncryptText(txt)
И вроде всё. Если это лог чата или текст форума - можно подавать на формочку. Если это профиль юзера - можно распихать его по полям датабазы, вроде ничего сложного уже нету.
C# в топку. С++ рулит.