2015-09-04 29 views
1

我有這樣的結果(與$ dom-> saveHTML()方法):如何通過縮進屬性保存HTML?

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Complete!</title> 
    </head> 
    <body> 
     <div id="foo" class="bar baz" data-foo="a" data-bar="b" data-baz="c"></div> 
    </body> 
</html> 

但我想保存屬性的縮進導致:(?)

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Complete!</title> 
    </head> 
    <body> 
     <div id="foo" 
       class="bar baz" 
       data-foo="a" 
       data-bar="b" 
       data-baz="c"></div> 
    </body> 
</html> 

如何與本地的PHP使它DOM文檔/的DOMNode /一個DOMElement/somethingelse?

UPD:是的!我真的需要特定的格式以供人們閱讀。

+1

我不認爲你可以做到這一點。另外:爲什麼你真的需要特定的格式? –

+0

@EliasVanOotegem,是的,真的需要。 libxml2(C語言)具有此功能(可能)。但是這裏需要php的實現。 – Deep

+0

@EliasVanOotegem例如(Ctrl + U):https://cdn.css-tricks.com/wp-content/uploads/2015/05/kiwi.svg – Deep

回答

0

自己回答。也許這將是一個很好的解決方案:

$html = $dom->saveHTML(); 
$html = html_entity_decode($html, ENT_QUOTES, 'UTF-8'); 
$html = explode("\n", $html); 
foreach ($html as $num => $line) { 
    if (preg_match('/^(\s*<[a-z]+\s+)([^>]+)(>)(.*)$/s', $line, $m)) { 
     $offset = ceil(mb_strlen($m[1])/4); 
     $attrs = preg_split('/"\s+/', $m[2]); 
     $attrs = join("\"\n" . str_repeat(' ', $offset), $attrs); 
     $html[$num] = $m[1] . $attrs . $m[3] . $m[4]; 
    } 
} 
$html = join("\n", $html);