PHP htmlentities() 不转换 html 标签

2024-04-03

我发现了一些提到该问题的帖子,但没有一个能够完全解决该问题。

我需要一个函数,该函数将输出以 htmlentities() 的方式转换所有特殊字符的内容,但保留所有 html 标签。

我尝试了许多不同的方法,但正如我上面提到的 - 它们都没有按预期工作。

我想知道是否有办法使用 PHP 类 DomDocument 来做到这一点。

我尝试使用以下方法来做到这一点:

$objDom = new DOMDocument('1.0', 'utf-8');
$objDom->loadhtml($content);
return $objDom->savehtml();

这是可行的,但它还添加了页面的整个结构,即

<head><body> etc.

我只需要转换 $content 变量的内容并完成工作。

这里值得一提的另一件事是 $content 也可能有一些转换为 xhtml 投诉的字符 - 因为它来自 Wysiwyg。所以它可能包含 & 等,也应该保留。

任何人都知道使用 DomDocument 执行此操作的方法 - 也许我应该使用不同的保存方法?

好的 - 我想出了以下内容 - 不太好,但是工作到位:

$objDom = new DOMDocument('1.0', 'UTF-8');
$objDom->loadHTML($string);
$output = $objDom->saveXML($objDom->documentElement);
$output = str_replace('<html><body>', '', $output);
$output = str_replace('</body></html>', '', $output);
$output = str_replace('&#13;', '', $output);
return $output; 

任何更好的想法将不胜感激。


你可以使用get_html_translation_table http://php.net/get_html_translation_table并删除< and > items:

$trans = get_html_translation_table(HTML_ENTITIES, ENT_NOQUOTES);
unset($trans['<'], $trans['>']);
$output = strtr($input, $trans);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP htmlentities() 不转换 html 标签 的相关文章

随机推荐