php string转为html,PHP convert string to htmlentities

OK, I've been playing with this for a while. The result may not be the best or most direct solution (and, frankly, I disagree with your approach entirely if arbitrary users are going to be submitting the input), but it appears to "work". And, most importantly, it doesn't use regexes for parsing XML. :)

Faking the input

$str = <<

a div..
a div..
this should be ignored

EOF;

?>

Code

function recurse(&$doc, &$parent) {

if (!$parent->hasChildNodes())

return;

foreach ($parent->childNodes as $elm) {

if ($elm->nodeName == "code" || $elm->nodeName == "pre") {

$content = '';

while ($elm->hasChildNodes()) { // `for` breaks the `removeChild`

$child = $elm->childNodes->item(0);

$content .= $doc->saveXML($child);

$elm->removeChild($child);

}

$elm->appendChild($doc->createTextNode($content));

}

else {

recurse($doc, $elm);

}

}

}

// Load in the DOM (remembering that XML requires one root node)

$doc = new DOMDocument();

$doc->loadXML("" . $str . "");

// Iterate the DOM, finding and

 tags: 
 

recurse($doc, $doc->documentElement);

// Output the result

foreach ($doc->childNodes->item(0)->childNodes as $node) {

echo $doc->saveXML($node);

}

?>

Output

<div> a div.. </div>

 
 

<div> a div.. </div>

this should be ignored

Proof

You can see it working here.

Note that it doesn't explicitly call htmlspecialchars; the DOMDocument object handles the escaping itself.

I hope that this helps. :)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值