Ben
Ben

Reputation: 21249

How do you get Tidy to strip inline styles

I'm trying to use Tidy to clean up and transfer some content from an old system.

The system has a lot of inline style overrides which I want to drop completely (I don't want to convert them to classes, just drop them).

I'm using the following config:

$config = array(
    'indent'         => true,
    'output-xhtml'   => true,
    'drop-font-tags' => true,
    'clean' => true,
    'merge-spans'=> true,
    'drop-proprietary-attributes'=> true,
);

And run it like this:

$test = '<p><span style="font-size: 10px;">Some content goes here.</span></p>';

$tidy = new tidy;
$tidy->parseString($test, $config, 'utf8');
$body = $tidy->body();
var_dump($body->value);

But the output is still:

<body>
  <p>
    <span style="font-size: 10px;">Some content goes here.</span>
  </p>
</body>

How do I get Tidy to remove the style="font-size: 10px;" part as well, or drop the span tag altogether.

I can't see anything else in the documentation that would do that.

Upvotes: 1

Views: 1610

Answers (1)

dave
dave

Reputation: 64687

You could just remove the style attribute yourself:

$test = '<p><span style="font-size: 10px;">Some content goes here.</span></p>';
$dom = new DOMDocument;                 
$dom->loadHTML($test);                  
$xpath = new DOMXPath($dom);           
$nodes = $xpath->query('//*[@style]');  // Find elements with a style attribute
foreach ($nodes as $node) {              
    $node->removeAttribute('style');    // Remove style attribute
}
$test = $dom->saveHTML();
$tidy = new tidy;
$tidy->parseString($test, $config, 'utf8');
$body = $tidy->body();
var_dump($body->value);                  

Upvotes: 1

Related Questions