Grandamakulo   23-06-2023, 12:47
#1
Pues eso, compañeros, ¿cómo obtener el texto plano de un RichText —HTML—, similar a WebPage.ToString, pero sin cargar este componente? Quiero decir, que si hay alguna función de cadena que mi natural torpeza me haya impedido ver.
De momento, me apaño así —las ReGex las he ido encontrando por ahí y adaptándolas al algo corto PCRE de gambas3—:

Código:
Public Function HTMLaTexto(sTexto As String) As String
  ' **** Obtener texto plano de un RichText (HTML).
  ' <<<< sPaso : Devuelve una cadena con texto plano.
  ' >>>> sTexto: Texto formato HTML.
  '' ╔═════════════════════════════════════════════════════════════╗
  '' ║ Atención: PCRE sólo admite texto ASCII extendido, no UTF-8. ║
  '' ║     Los valores obtenidos pueden no ser correctos.          ║
  '' ╚═════════════════════════════════════════════════════════════╝

  Dim sPaso As String
  
  ' Eliminar CSS y JS
  sPaso = RegExp.Replace(sTexto, "<(script|style)[^>]*>(.*?)<.(script|style)>", "", RegExp.Caseless + RegExp.DotAll)
  ' Eliminar comentarios
  sPaso = RegExp.Replace(sPaso, "<!--.*?-->", "", RegExp.DotAll)
  ' Eliminar etiquetas
  sPaso = RegExp.Replace(sPaso, "<(.|\n)*?>", "", RegExp.Greedy)
  ' Eliminar caracteres de edición antes y después
  sPaso = Trim(sPaso)
  Return sPaso

End

Gracias de antemano.
Última modificación: 23-06-2023, 14:45 por Grandamakulo.

En un lugar de La Mancha de cuyo nombre me acuerdo perfectamente...
vuott   23-06-2023, 14:16
#2
No sé si este código es Confused coherente con lo que pides:
Código:
Public Sub Main()

  Print HTMLaTexto("a<FONT Color=red><B>Abcd-/ef=123</b></font>")

End


Private Function HTMLaTexto(sTexto As String) As String

  Dim s As String

  For i As Integer = 1 To Len(sTexto)
    If Mid(sTexto, i, 1) = "<" Then
      i = InStr(sTexto, ">", i)
      Continue
    Endif
    s &= Mid(sTexto, i, 1)
  Next

  Return s

End

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
Shell   23-06-2023, 14:18
#3
Bueno, soy un poco burro a veces.

Existe esta función que no sé si hace lo que te interesa. Smile

Código:
String.FromHTML

Se encuentra en el componente gb.util y hace esta función:
 
Cita:Return the text contents of an HTML string, by removing all markups and entities.

Te adjunto el enlace:

String.FromHTML (gb.util)

A ver si eso ayuda.

Saludos

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
Grandamakulo   23-06-2023, 14:44
#4
@Voutt, no, eso sólo quita las etiquetas y, creo, los comentarios, pero JS o CSS lo dejaría como texto.
@Shell, ¡eso es!, no era capaz de encontrarlo.
¡¡Muchísimas gracias a ambos!!

En un lugar de La Mancha de cuyo nombre me acuerdo perfectamente...
vuott   23-06-2023, 15:35
#5
Si quieres usar la función ''.FromHTML()", sugerida por 'Shell', sin tener que activar el Componente 'gb.util', puedes copiarla de las fuentes del Componente, escritas en Gambas:

https://gitlab.com/gambas/gambas/-/blob/...ring.class

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
  
Usuarios navegando en este tema: 2 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.