首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将字符串与中间的标记一起分解[PHP]

将字符串与中间的标记一起分解[PHP]
EN

Stack Overflow用户
提问于 2018-07-17 17:40:11
回答 1查看 1.9K关注 0票数 3

我有以下示例字符串:

代码语言:javascript
复制
$string = 'I wish you a merry <span style="font-size: 14px;">Christmas</span> and a happy new <span style="font-size: 18px;">year</span>!'

现在我尝试分解这个字符串,这样输出就是:

代码语言:javascript
复制
$arr[0] = 'I wish you a merry '
$arr[1] = '<span style="font-size: 14px;">Christmas</span>'
$arr[2] = ' and a happy new '
$arr[3] = '<span style="font-size: 18px;">year</span>'
$arr[4] = '!'

我试过了

代码语言:javascript
复制
$arr = explode('<span style="font-size: ', $string);

当然,然后我会包含整个字符串,直到下一个开始的<span>-Tag。

我还尝试在所有使用的字体大小上使用preg_match_all和一个foreach循环:

代码语言:javascript
复制
preg_match_all('~\<span style="font-size:' . $fontSize . 'px;"\>(.*?)\<\/span\>~', $string, $output[$fontSize]);

但随后不包括不在标签之间的其他字符串。但我需要他们按照描述的顺序。

如何才能将其正确转换为给定的数组?我需要它为PHP lib PDFlib,这是不能读取超文本标记语言。

EN

回答 1

Stack Overflow用户

发布于 2018-07-17 17:54:45

你应该使用这些工具来完成这项工作。这里有一种使用DOMDocument实现这一点的方法(通过一个小技巧)。

代码语言:javascript
复制
$dom = new \DOMDocument();

$string = 'I wish you a merry <span style="font-size: 14px;">Christmas</span> and a happy new <span style="font-size: 18px;">year</span>!';
$dom->loadHTML("<div id='".($id=uniqid())."'>$string</div>"); //Trick, wrap in a div with a unique id.


foreach ($dom->getElementById($id)->childNodes as $child) { 
    echo $dom->saveHTML($child).PHP_EOL;
}

输出:

代码语言:javascript
复制
 I wish you a merry     
 <span style="font-size: 14px;">Christmas</span>    
  and a happy new     
 <span style="font-size: 18px;">year</span>    
 !

当然,您可以将结果放入一个数组中,例如$array[] = $dom->saveHTML($child);,而不是echo $dom->saveHTML($child)

Live example

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51378050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档