規範に合わないhtml段落php処理細則
最近アマチュアがrss集約アプリケーションを維持していると、strip_で多くのサイトfeedのエントリの要約に様々な問題があることがわかりました.tagsは一刀で切りましょう.要約の段落とスタイルが歪んでいます.
たとえば、指定した要約の長さの切断など、出力を切断するWebサイトのサマリーがあります.これにより、閉じていないhtmlラベルがサマリーに表示されます.次のサマリーは例です.
上の要約にはいくつかの不正があります.
1.htmlタグ大文字
2.最後のstrongは、切断が正常に閉じていないため、strongの親ラベルpが失われます.
3.ラベルのプロパティには、align,styleなどのスタイルプロパティと定義が表示されます.
その影響についてお話しします
2:処理しない出力はページのスタイルを混乱させ、正常に閉じていないstrongブラウザのように後ろの出力を自動的にサブ要素として計算する.
3:スタイル定義はあなたのページスタイルに影響を与える可能性があります.画像はあなたの要約コンテナにあふれています.
1:視覚的なエラーは発生しませんが、htmlの合法性に影響します.
対処法についてお話しします
3:正則で属性を置き換えることができます.
2:DOMNode::C 14 Nメソッドで仕様できます.紛失したラベルを補うことができますが、はになります.
など:1.なぜstripを使わないの?tagsは処理しますか?はい、指定したラベルを保持することもできますが、htmlentities 2に安全ではないラベルを渡します.domは属性を削除できるようですね!はい、これは以下に説明します.総合処理1,2,3のコードは以下の通りです.
だいたいOK、$pstrの内容はbody小包の$strで、最後にbodyを解決するだけでいいです.
最後に言いたいことはいくつかあります.
1.プロパティを巡回するときに削除しないでください.たとえば、imgには3つのプロパティstyle、src、altがあります.これはstyleを削除するだけで、styleの後ろには削除されません.
2.必ずsaveHTML()の戻り値を後続処理の内容としないでください.結果は漢字が次のようになります.
回首2012年,手机市场还
怖がらないでもう一度調整するだけ
さぼるために、その戻り値は使わないでください.
次のように変更できます.
ただし、戻り値はbodyだけでなくhtmlタグもあるので、気にしないで使えます.GetElementsByTagNameよりも手間が省けます
たとえば、指定した要約の長さの切断など、出力を切断するWebサイトのサマリーがあります.これにより、閉じていないhtmlラベルがサマリーに表示されます.次のサマリーは例です.
$str=<<<EOF
<P> 【 】 , 2013 , 。 , , 。</P>
<P align=center><IMG style="BORDER-BOTTOM: black 1px solid; BORDER-LEFT: black 1px solid; BORDER-TOP: black 1px solid; BORDER-RIGHT: black 1px solid" alt="2.2GHz 800 N " align=1 src="http://imgm.cnmo.com/cnmo_product/18_500x375/698/ceFYnyzZgUijQ.jpg"><BR>2012 HTC Butterfly</P>
<P> 2012 , , , 。 2013 , , , 。</P>
<P> , , , 。 , , 。</P>
<P align=center><IMG style="BORDER-BOTTOM: black 1px solid; BORDER-LEFT: black 1px solid; BORDER-TOP: black 1px solid; BORDER-RIGHT: black 1px solid" alt="6.44 800 N " src="http://img.cnmo-img.com.cn/905/904155.jpg"></P>
<P> , , , 。 2013 N , 。<STRONG>
EOF;
上の要約にはいくつかの不正があります.
1.htmlタグ大文字
2.最後のstrongは、切断が正常に閉じていないため、strongの親ラベルpが失われます.
3.ラベルのプロパティには、align,styleなどのスタイルプロパティと定義が表示されます.
その影響についてお話しします
2:処理しない出力はページのスタイルを混乱させ、正常に閉じていないstrongブラウザのように後ろの出力を自動的にサブ要素として計算する.
3:スタイル定義はあなたのページスタイルに影響を与える可能性があります.画像はあなたの要約コンテナにあふれています.
1:視覚的なエラーは発生しませんが、htmlの合法性に影響します.
対処法についてお話しします
3:正則で属性を置き換えることができます.
preg_replace("/<([a-z][a-z0-9]*)(?:[^>]*(\ssrc=['\"][^'\"]*['\"]))?[^>]*?(\/?)>/i",'<$1$2$3>',$str);
2:DOMNode::C 14 Nメソッドで仕様できます.紛失したラベルを補うことができますが、はになります.
など:1.なぜstripを使わないの?tagsは処理しますか?はい、指定したラベルを保持することもできますが、htmlentities 2に安全ではないラベルを渡します.domは属性を削除できるようですね!はい、これは以下に説明します.総合処理1,2,3のコードは以下の通りです.
$doc = new DOMDocument();
$doc->formatOutput=false;
$doc->loadHTML(mb_convert_encoding($str, 'HTML-ENTITIES', 'UTF-8'));
$nodes = $doc->getElementsByTagName('*');
foreach ( $nodes as $node ) {
$delAtts=array();
//
$nodeN=$node->tagName;
$nodeAtts=$node->attributes;
foreach($nodeAtts as $attN=>$att){
// img src
if(strtolower($attN)=='src' && strtolower($nodeN)=='img') continue;
//
array_push($delAtts,$attN);
}
foreach($delAtts as $A){
$node->removeAttribute($A);
}
}
$doc->saveHTML();
$pstr=$doc->GetElementsByTagName('body')->item(0)->C14N();
//clear empty tag
$pstr=preg_replace('/<(\w+)>(\s| )*<\/\1>/i',"",$pstr);
だいたいOK、$pstrの内容はbody小包の$strで、最後にbodyを解決するだけでいいです.
最後に言いたいことはいくつかあります.
1.プロパティを巡回するときに削除しないでください.たとえば、imgには3つのプロパティstyle、src、altがあります.これはstyleを削除するだけで、styleの後ろには削除されません.
2.必ずsaveHTML()の戻り値を後続処理の内容としないでください.結果は漢字が次のようになります.
回首2012年,手机市场还
怖がらないでもう一度調整するだけ
mb_convert_encoding($str, 'UTF-8','HTML-ENTITIES')
さぼるために、その戻り値は使わないでください.
3.$doc->GetElementsByTagName('body')->item(0)->C14N();
次のように変更できます.
$doc->documentElement->C14N();
ただし、戻り値はbodyだけでなくhtmlタグもあるので、気にしないで使えます.GetElementsByTagNameよりも手間が省けます