将HTML字符串转换为PHP数组

时间:2016-05-12 01:10:16

标签: php domdocument

假设这样的HTML字符串:

$str = '<p>Hello World!</p><p style="text-align:center"><img src="foo.png" /><br /></p>';

可以将它转换成这样的数组吗?

[0] => '<p>Hello World!</p>'
[1] => '<p style="text-align:center">'
[2] => '<img src="foo.png" />'
[3] => '<br />'
[4] => '</p>'

我尝试使用DOMDocument有很多不同的方法,但问题似乎总是归结为育儿。我需要遍历HTML而不考虑父/子关系。

4 个答案:

答案 0 :(得分:1)

@ olibiaz&#39;答案会做..

只是想用preg_split显示另一种方法。

$str = '<p>Hello World!</p><p style="text-align:center"><img src="foo.png" /><br /></p>';
$flags = PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY;
$regex = '/(<[a-z0-9=\-:." ^\/]+\/>)|(<[^\/]+>[^<\/]+<\/[a-z0-9]+>)|(<[a-z0-9=\-:." ^\/]+>)/';
$parts = preg_split( $regex, $str, -1, $flags);

<强>输出:

array (size=5)
    0 => string '<p>Hello World!</p>' (length=19)
    1 => string '<p style="text-align:center">' (length=29)
    2 => string '<img src="foo.png" />' (length=21)
    3 => string '<br />' (length=6)
    4 => string '</p>' (length=4)

答案 1 :(得分:0)

你想为此使用PHP DOM扩展吗? 或者,你可以简单地在新行上爆炸,如下所示:

var_dump(explode("\n", $html));

结果是:

Array
(
    [0] => <p>Hello World!</p>
    [1] => <p style="text-align:center">
    [2] =>   <img src="foo.png" />
    [3] =>   <br />
    [4] => </p>
)

答案 2 :(得分:0)

您可以使用正则表达式来实现这一目标。

$input = '<p>Hello World!</p><p style="text-align:center"><img src="foo.png" /><br /></p>';
$regex = '/(<[a-z0-9=\-:." ^\/]+\/>)|(<[^\/]+>[^<\/]+<\/[a-z0-9]+>)|(<[a-z0-9=\-:." ^\/]+>)/';


$result = []; 
preg_match_all($regex, $input, $result);

$result = $result[0];

$result看起来像

array(5) {
  [0] =>
  string(19) "<p>Hello World!</p>"
  [1] =>
  string(29) "<p style="text-align:center">"
  [2] =>
  string(21) "<img src="foo.png" />"
  [3] =>
  string(6) "<br />"
  [4] =>
  string(4) "</p>"
}

但有两个重要的事情:

  • 当然,这个正则表达式模式可以改进,更像是一个例子。
  • 在不同情况下测试,因为我对您的特定示例输入进行了测试,并且在更复杂的结构上可能会失败。在这种情况下,请根据您的需要进行调整。

答案 3 :(得分:0)

没有正则表达式解决方案:

$str = '<p>Hello World!</p><p style="text-align:center"><img src="foo.png" /><br /></p>';
$tags = explode( '|', str_replace('><', '>|<', $str));
print_r($tags);

输出:

Array
(
    [0] => <p>Hello World!</p>
    [1] => <p style="text-align:center">
    [2] => <img src="foo.png" />
    [3] => <br />
    [4] => </p>
)

Ideone Demo