2011-07-27 19 views
2

私はDOMでこの整頓アップ乱雑-htmlタグに取り組んできましたが、今私は大きな問題を実現し、DoctypeがHTMLに追加されないようにするにはどうすればよいですか?

$content = '<p><a href="#">this is a link</a></p>'; 

function tidy_html($content,$allowable_tags = null, $span_regex = null) 
{  
    $dom = new DOMDocument(); 
    $dom->loadHTML($content); 

     // other codes 
    return $dom->saveHTML(); 
} 

echo tidy_html($content); 

それが出力全体のDOM、

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
<html><body><p><a href="#">this is a link</a></p></body></html> 

けど私は、

を望んでいない、見返りにこのような何かをしたい

<p><a href="#">this is a link</a></p> 

のみ

これは可能ですか?

編集:私は見つけた

innerHTMLシミュレーションが&#13;Âのように、私のデータベースにいくつかの奇妙なコードを生成し、’

<p>Monday July 5th 10am - 3.30pm £20</p>&#13; 
<p>Be one of the first visitors to the ...at this special event.Â</p>&#13; 
<p>All participants will receive a free copy of the ‘Contemporary Art Kit’ produced exclusively for Art on....</p>&#13; 

innerHTMLシミュレーション、

$innerHHTML = ''; 
$nodeBody = $dom->getElementsByTagName('body')->item(0); 
foreach($nodeBody->childNodes as $child) { 
    $innerHTML .= $nodeBody->ownerDocument->saveXML($child); 
} 

それが作成する理由私はこのようなものを持ったときにブレークだからsaveXML($child)

によって引き起こされている奇妙なコードは、

$content = '<p><br/><a href="#">xx</a></p> 
<p><br/><a href="#">xx</a></p>'; 

それはこのような何かを返し、

<p><a href="#">xx</a></p>&#13; 
<p><a href="#">xx</a></p> 

しかし、私は、何かこれをしたいです実際には、

<p><a href="#">xx</a></p> 
<p><a href="#">xx</a></p> 

答えて

2

フラグメントで作業している場合は、通常、身体の内容だけが必要です。

PHPのDomDocumentにはinnerHTMLのようなものはありません。ただし、それをシミュレートすることができます:あなただけのフラグメントを修復したい場合は、あなたにもtidy libraryを利用することができます

$innerHHTML = ''; 
$nodeBody = $dom->getElementsByTagName('body')->item(0); 
foreach($nodeBody->childNodes as $child) { 
    $innerHTML .= $nodeBody->ownerDocument->saveXML($child); 
} 

$html = tidy_repair_string($html, array('output-xhtml'=>1,'show-body-only'=>1)); 
+0

ありがとうございました!私は 'tidy_repair_string'を私のコードに組み込む方法を知らないのですが、' innerHTML'シミュレーションは完全に機能します! – laukok

+0

は、 'innerHTML'シミュレーションが何か奇妙なものを生成することを知りました。上記の私の編集をご覧ください。ありがとう。 – laukok

+0

あなたのエンコーディングの問題のようです。 UTF-8でエンコードされた文字列をDomDocumentに出力するようにしてください。そして前に改行を正規化することもできました。しかし、あなたはきちんとした図書館を読んで、長年の経験とエンコーディングと改行を扱うべきです。 – hakre

0

HakreがすでにHTML Tidyの、へshow-body-onlyオプションを言及していますおそらくあなたが望むものです。

ps。 Here'sちょうどこの目的のためにMediaWikiによって使用されるTidy設定ファイル。

関連する問題