Eliminar el estilo de HTML

Tengo una base de datos llena de descripciones de productos que han sido ingresadas plagadas de horrible HTML generado por computadora y plagado de información de estilo diferente … atributos de estilo, tags de fuente, atributos de fondo …

Tengo que rediseñar el sitio web, pero primero debo eliminar todo el estilo de las descripciones del producto. Hay 100.000 productos antes de que alguien sugiera hacerlo manualmente. Estoy pensando que algunos regex creativos en PHP podrían ser el truco.

Idealmente, me gustaría eliminar todo el HTML y simplemente tener texto sin formato, pero las descripciones contienen tablas y tablas de tablas … así que eso terminaría en lágrimas.

Esperamos sus soluciones creativas 🙂

EDITAR-

Pensándolo bien, también podría hacerlo en VBA, ya que puedo exportarlos a una hoja de Excel. Entonces, las soluciones PHP o VBA serían geniales.

EDITAR-

Mont Blanc Scott Roof mounted cycle bike carrier

Part Number: 728540

-->

Mont Blanc Scott Roof Bar Rack 1 Cycle Carrier


Scott

  • Stylish, easy to use roof mounted cycle carrier, distinctive oval carrying bar.
  • Extra Soft Frame clamps hold cycle safely and gently
  • Extra wide wheel holders take the fattest tyres
  • Strong Webbing straps fasten wheels securely to carrier
  • Upright, roof bar mounted, locking cycle carrier
  •  Locks to roof rails and locks bikes
  •  Quick and easy to use
  • Adjustable for most cycle styles

Open document

To view Fitting Instructions in PDF format please click the spanner
Technical data

Mont Blanc Scott

Max number of bikes
1
Load capacity (kg)
15 KG
Weight (kg)
2.2KG
Fits frame-dimensions (mm)
Up to 80mm
Fits wheel-dimensions
All
Locks bikes to carrier
Yes
Locks carrier to car
Yes
Tilt function, with bikes
NA
TÜV/EuroBE approved
NA
Fullfills City Crash norms
NA
Miscellaneous

Fits all types of Roof Bars,

The cycle carrier is guaranteed for Five year from date of purchase.

We stock a wide range of towbars and towing accessories.
Click here to email us
if you require details of our other towing equipment.



Please note that with the Type of cycle carrier where you mount it
onto a flange ball you may need the long reach ball which will
allow you enough clearance from the bumper
Not from the UK ? Click the flag to purchase this item from our EU site

EDITAR-

Al revisarlo, creo que necesito deshacerme de lo siguiente:

Atributos: estilo bgcolor fondo

Etiquetas: fuente

    Recomendaría usar XSLT para quitar todo el contenido no deseado. Una plantilla de identidad simple sería un buen punto de partida.

    ¿Qué pasa con la función strip_tags de php?

    La parte molesta es que tendrás que pasar cada etiqueta que quieras conservar en una matriz, pero solo tienes que escribirla una vez.

    Para eliminar los atributos de etiqueta, bgcolor, etc. Alguien hizo esta función aquí que podría valer la pena, pero tenga en cuenta las dobles comillas dudosas en esa página. Hay un enlace en la parte inferior para descargar el código sin formato wordpress.

    Gracias a la idea de @ Paul aquí hay un ejemplo en Excel. Esto es muy difícil y también debe modificarse dependiendo de cómo esté almacenando su HTML en Excel; pero con suerte te ayudará a empezar.

    Este ejemplo supone algunas cosas:

    1. Primero ha instalado el objeto COM de TidyATL (haga clic en el enlace que dice ‘envoltorio’ ; puede registrarlo en Win 7 de 64 bits copiando primero la DLL en C: \ Windows \ SysWOW64 y ejecutando regsvr32 C: \ Windows \ SysWOW64 \ TidyATL.dll).

    2. Su proyecto de Excel tiene referencias a Microsoft XML 6.0 y Tidy 1.0 Type Library

    3. Su HTML se almacena en la Celda A1 de la Hoja 1. Los resultados se colocan en la Celda B1. Puede extender fácilmente esta idea para iterar a través de todas las celdas usadas en una columna y procesar todo el HTML a la vez.

    4. Tengo cero experiencia escribiendo XSLT. Arranqué la ‘plantilla de identidad’ directamente desde aquí . Nunca antes había usado XSLT hoy; así que tal vez alguien que lo sepa pueda editar el XSLT para quitar los nodos. Este ejemplo simplemente elimina todos los atributos.

    Esto usa Tidy HTML para convertir su feo HTML en XHTML, luego aplica una plantilla XSLT al resultado.

    EDITAR : perdón, arruinó el atributo “coincidencia” en el XSLT. Was: match = ‘@ * | node ()’ debería ser: match = ‘node ()’

    Aquí está el código que utilicé:

     Sub TidyUp() Dim t As TidyATL.TidyDocument Dim sXSLT sXSLT = "< ?xml version='1.0' encoding='ISO-8859-1'?>" & _ "" & _ "" & _ " " & _ " " & _ " " & _ "" & _ "" Set t = New TidyATL.TidyDocument t.ParseString Sheet1.Range("A1").Value t.SetOptBool TidyXmlOut, True t.SetOptBool TidyXhtmlOut, True t.SetOptBool TidyNumEntities, True t.SetOptBool TidyXmlDecl, True t.CleanAndRepair Dim x As MSXML2.DOMDocument Dim x2 As MSXML2.FreeThreadedDOMDocument Dim xe As MSXML2.IXMLDOMParseError Set x = New MSXML2.DOMDocument Set x2 = New MSXML2.FreeThreadedDOMDocument 'Load XHTML into a DOM x.LoadXML t.SaveString Set xe = x.parseError If xe.ErrorCode <> 0 Then MsgBox "Err: " & xe.reason End End If 'Load XSLT into a DOM x2.LoadXML sXSLT Set xe = x2.parseError If xe.ErrorCode <> 0 Then MsgBox "Err: " & xe.reason End End If Dim xt As XSLTemplate Set xt = New XSLTemplate Set xt.stylesheet = x2 Dim xp As IXSLProcessor Set xp = xt.createProcessor xp.input = x xp.transform Sheet1.Range("B1").Value = xp.output End Sub 

    Este es el resultado (aún feo pero sin atributos):

     < ?xml version="1.0" encoding="UTF-16"?>

    Mont Blanc Scott Roof mounted cycle bike carrier

    Part Number: 728540

    Mont BlancScott Roof Bar Rack 1 Cycle Carrier


    Scott

    • Stylish, easy to use roof mounted cycle carrier, distinctive oval carrying bar.
    • Extra Soft Frame clamps hold cycle safely and gently
    • Extra wide wheel holders take the fattest tyres
    • Strong Webbing straps fasten wheels securely to carrier
    • Upright, roof bar mounted, locking cycle carrier
    • Locks to roof rails and locks bikes
    • Quick and easy to use
    • Adjustable for most cycle styles

    To view Fitting Instructions in PDF format please click the spanner
    Technical data

    Mont Blanc Scott

    Max number of bikes
    1
    Load capacity (kg)
    15 KG
    Weight (kg)
    2.2KG
    Fits frame-dimensions (mm)
    Up to 80mm
    Fits wheel-dimensions
    All
    Locks bikes to carrier
    Yes
    Locks carrier to car
    Yes
    Tilt function, with bikes
    NA
    TÜV/EuroBE approved
    NA
    Fullfills City Crash norms
    NA
    Miscellaneous

    Fits all types of Roof Bars,

    The cycle carrier is guaranteed for Five year from date of purchase.

    We stock a wide range of towbars and towing accessories.
    Click here to email us
    if you require details of our other towing equipment.



    Please note that with the Type of cycle carrier where you mount it
    onto a flange ball you may need the long reach ball which will
    allow you enough clearance from the bumper
    Not from the UK ? Click the flag to purchase this item from our EU site

    EDITAR: Este XSLT parece hacer el truco; elimina algunas tags con su contenido y algunas tags sin su contenido, lo que especifique. Nuevamente, tal vez alguien con algún conocimiento XSLT pueda elaborar.

     < ?xml version='1.0' encoding='ISO-8859-1'?>            

    Resultado:

     < ?xml version="1.0" encoding="UTF-16"?>
    Mont Blanc Scott Roof mounted cycle bike carrier

    Part Number: 728540
    Mont BlancScott Roof Bar Rack 1 Cycle Carrier

    Scott
    • Stylish, easy to use roof mounted cycle carrier, distinctive oval carrying bar.
    • Extra Soft Frame clamps hold cycle safely and gently
    • Extra wide wheel holders take the fattest tyres
    • Strong Webbing straps fasten wheels securely to carrier
    • Upright, roof bar mounted, locking cycle carrier
    • Locks to roof rails and locks bikes
    • Quick and easy to use
    • Adjustable for most cycle styles
    To view Fitting Instructions in PDF format please click the spanner
    Technical dataMont Blanc Scott
    Max number of bikes
    1
    Load capacity (kg)
    15 KG
    Weight (kg)
    2.2KG
    Fits frame-dimensions (mm)
    Up to 80mm
    Fits wheel-dimensions
    All
    Locks bikes to carrier
    Yes
    Locks carrier to car
    Yes
    Tilt function, with bikes
    NA
    TÜV/EuroBE approved
    NA
    Fullfills City Crash norms
    NA
    Miscellaneous
    Fits all types of Roof Bars,
    The cycle carrier is guaranteed for Five year from date of purchase.

    We stock a wide range of towbars and towing accessories.
    Click here to email us if you require details of our other towing equipment.

    Please note that with the Type of cycle carrier where you mount it
    onto a flange ball you may need the long reach ball which will
    allow you enough clearance from the bumper
    Not from the UK ? Click the flag to purchase this item from our EU site

    Esta expresión regular debería darte los resultados esperados, pero no la he probado:

     preg_replace('/(< .*)(style=\".*\")(.*>)/', '{$1}{$3}', $yourhtml); 

    Creo que la expresión regular necesaria podría ser mucho más simple de lo que imaginas, pero una vez más, no sé cómo son las descripciones de los productos. ¿Cuáles son las posibilidades de encontrar en las descripciones, aparte de como parte de las tags HTML? Si las posibilidades son muy pequeñas, ¿podría algo así no hacer el truco?

     $new_description = preg_replace('/< ([\w_ '"])+>/', '', $description);