You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DOMCrawler截断text()内标签?如何保留自定义标签

DOMCrawler截断自定义标签的原因及解决方法

嘿,我之前也碰到过一模一样的问题!先看你的代码示例:

$html = '<textarea name="main"><customtag>Hello World!</customtag></textarea>';
$crawler = new Crawler($html);
$text = $crawler->filter('textarea[name="main"]')->text();
print_r($text);

为什么会截断自定义标签?

DOMCrawler的text()方法底层依赖PHP DOM扩展的textContent属性,这个属性的核心逻辑就是提取节点下所有纯文本内容,自动忽略所有HTML标签(不管是标准标签还是自定义标签)。它只会把标签包裹的文本内容拼接后返回,所以<customtag>自然就被过滤掉了,只留下Hello World!。

如何保留自定义标签?

想要保留内部的自定义标签,别用text(),换成html()方法就行,它会返回节点内部的完整HTML结构:

$html = '<textarea name="main"><customtag>Hello World!</customtag></textarea>';
$crawler = new Crawler($html);
$innerHtml = $crawler->filter('textarea[name="main"]')->html();
print_r($innerHtml);
// 输出结果:<customtag>Hello World!</customtag>

如果你的自定义标签结构比较复杂,或者需要更底层的DOM操作,还可以直接获取DOM节点来处理:

$node = $crawler->filter('textarea[name="main"]')->getNode(0);
$innerHtml = $node->ownerDocument->saveHTML($node->firstChild);
print_r($innerHtml);

这种方式能更精准地控制节点内容的提取,适合复杂场景。

内容的提问来源于stack exchange,提问作者DanKud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:18:17