我有这个HTML模板:
<div>
<p class="ex-fr">Tex1 - Edit</p>
Out Text 1 Edit
<p>Tex2 - Edit</p>
Out Text 1 Edit
<br>
Out Text 3 Edit
</div>
我想创建一个页面来编辑此模板的文本和Tags属性。
为此,我需要将这个html解析为php数组并加载页面。
这是一个假设的数组,我可以从上面的html中得到:
$parsedHtml = array(
'thisIs'=>'tag',
'tag' => 'div',
'attr' => '',
'children'=> array(
0 => array(
'thisIs'=>'tag',
'tag' => 'p',
'attr' => 'class="ex-fr"',
'children'=> array(
'thisIs'=>'text',
'tag' => '',
'attr' => '',
'children'=> 'Tex1 - Edit'
)
),
1 => array(
'thisIs'=>'text',
'tag' => '',
'attr' => '',
'children'=> 'Out Text 1 Edit'
),
2 => array(
'thisIs'=>'tag',
'tag' => 'p',
'attr' => '',
'children'=> array(
'thisIs'=>'text',
'tag' => '',
'attr' => '',
'children'=> 'Tex2 - Edit'
)
),
3 => array(
'thisIs'=>'text',
'tag' => '',
'attr' => '',
'children'=> 'Out Text 2 Edit'
),
4 => array(
'thisIs'=>'sTag',
'tag' => 'br',
'attr' => '',
'children'=> ''
),
5 => array(
'thisIs'=>'text',
'tag' => '',
'attr' => '',
'children'=> 'Out Text 3 Edit'
)
)
);
目前我尝试使用此类: https://code.google.com/p/php-html2array/downloads/detail?name=class.htmlParser.php 问题是该类只返回标记,而没有标记的文本应该被忽略,如“Out Text 1 Edit”或“Out Text 2 Edit”
所以给定的数组是
(
[-{}-2-0-{}-] => Array
(
[id] => -{}-2-0-{}-
[father] =>
[tag] => div
[innerHTML] => <p class='ex-fr'>Tex1 - Edit</p> Out Text 1 Edit <p>Tex2 - Edit</p> Out Text 1 Edit <br> Out Text 3 Edit
[htmlText] => <div > <p class='ex-fr'>Tex1 - Edit</p> Out Text 1 Edit <p>Tex2 - Edit</p> Out Text 1 Edit <br> Out Text 3 Edit </div>
[stratr] =>
[childNodes] => Array
(
[0] => Array
(
[id] => -{}-1-0-{}-
[father] => -{}-2-0-{}-
[tag] => p
[innerHTML] => Tex1 - Edit
[htmlText] => <p class='ex-fr'>Tex1 - Edit</p>
[stratr] => class='ex-fr'
[childNodes] => Array
(
)
)
[1] => Array
(
[id] => -{}-1-1-{}-
[father] => -{}-2-0-{}-
[tag] => p
[innerHTML] => Tex2 - Edit
[htmlText] => <p>Tex2 - Edit</p>
[stratr] =>
[childNodes] => Array
(
)
)
[2] => Array
(
[id] => -{}-0-0-{}-
[father] => -{}-2-0-{}-
[tag] => br
[innerHTML] => <br>
[htmlText] => <br>
[stratr] =>
[childNodes] => Array
(
)
)
)
)
)
有什么想法将html解析成数组吗? (我已经搜索了浏览器如何解析html代码并在控制台中显示它,如chrome或firebug,并允许编辑)
我知道使用正则表达式解析html很难或不可能,还有其他解决方案吗?
提前谢谢大家,抱歉我的英语很差
最好的问候Andrea。
答案 0 :(得分:0)
如果您熟悉jQuery
,则可以使用phpQuery - 它基本上是php端口。简单,快速,并且记录良好。
答案 1 :(得分:0)
感谢您的建议我已经完成了您可以在下面看到的功能。
它不会给我我想要的东西,但它是一个很好的起点。 当我将获得最终解决方案时,我会为你们发布它们。感谢您的帮助。
function parseHtml( $parent ){
foreach( pq( $parent )->contents() as $children ){
echo '<br>';
$a = isset( $children->tagName );
if( $a ){
echo htmlentities( '<' . $children->tagName . '>' );
}else{
echo '<br>';
echo '"' . htmlentities( $children->textContent ) . '"';
echo '<br>';
}
parseHtml( $children );
if( $a ){
echo htmlentities( '</' . $children->tagName . '>' );
}
}
}