php text html,HTML2Text.php

class HTML2Text {

private $htmlTextString = "";

/**

* @param $DOMNodeList

* @return bool

*/

private function traversalDOM($DOMNodeList)

{

// 判断传入的是否为nodeList

if (!is_iterable($DOMNodeList)) {

/* 传入的不是 NodeList */

return "";

} else {

foreach ($DOMNodeList as $DOMNode) {

// 判断 nodeList 的子元素是否为 nodeList

if (is_iterable($DOMNode)) {

/* 子元素还是 nodeList,递归,继续遍历 */

$this->traversalDOM($DOMNode);

}

else

{

/* 子元素不是 nodeList,而是 node */

// 判断该 node 是否有子元素

if ($DOMNode->hasChildNodes()) {

// 该 node 有子元素,取得所有所有子元素,存入一个 nodeList 中

$nodeList = $DOMNode->childNodes;

// 开始新一轮的 nodeList 遍历

$this->traversalDOM($nodeList);

}

else

{

// 该 node 没有子元素

if ($DOMNode->nodeValue != null) {

$this->htmlTextString .= $DOMNode->nodeValue . " ";

}

}

}

}

}

}

/**

* HTML2Text constructor.

* @param $htmlString

*/

public function getText($htmlString) {

$dom = new DOMDocument;

@$dom->loadHTML($htmlString);

$xpath = new DOMXPath($dom);

/* 移除 html 中的 script */

// 参考:https://stackoverflow.com/questions/7130867/remove-script-tag-from-html-content

$scripts = $dom->getElementsByTagName('script');

$elementsToRemove = [];

foreach($scripts as $script)

{

$elementsToRemove[] = $script;

}

foreach ($elementsToRemove as $element)

{

$element->parentNode->removeChild($element);

}

/* 移除HTML中的注释 */

// 参考:https://stackoverflow.com/questions/6305643/remove-comments-from-html-source-code

foreach ($xpath->query('//comment()') as $comment) {

$comment->parentNode->removeChild($comment);

}

/* html 转 text */

$nodes = $xpath->query("//body");

$this->traversalDOM($nodes);

return $this->htmlTextString;

}

}

一键复制

编辑

Web IDE

原始数据

按行查看

历史

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值