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

PHP中如何仅转译非HTML标签的尖括号为HTML实体?

解决PHP中保留HTML标签并转义文本内尖括号的问题

直接用PHP内置的DOMDocument结合DOMXPath就能精准解决这个需求——通过遍历所有文本节点,只对文本内容里的尖括号转义,完全保留原有HTML标签结构,比正则和HTMLPurifier更贴合你的需求。

具体实现代码

function escapeTextAngleBrackets($html) {
    $dom = new DOMDocument();
    // 关闭XML错误提示,避免解析非标准HTML时报错
    libxml_use_internal_errors(true);
    // 加载HTML时避免自动补全DOCTYPE、html/body标签
    $dom->loadHTML('<?xml encoding="UTF-8">' . $html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
    libxml_clear_errors();

    $xpath = new DOMXPath($dom);
    // 定位所有文本节点
    $textNodes = $xpath->query('//text()');

    foreach ($textNodes as $node) {
        $originalText = $node->nodeValue;
        // 仅转义文本中的<和>为HTML实体
        $escapedText = str_replace(['<', '>'], ['&lt;', '&gt;'], $originalText);
        $node->nodeValue = $escapedText;
    }

    return $dom->saveHTML();
}

// 测试示例
$inputHtml = '<p> sample text with equation like b<a or text <inside> brackets </p>';
echo escapeTextAngleBrackets($inputHtml);

关键细节说明

  • 避免自动补全标签:使用LIBXML_HTML_NOIMPLIED和LIBXML_HTML_NODEFDTD参数,防止DOMDocument自动给你的HTML片段添加多余的<html>、<body>或DOCTYPE声明。
  • 精准处理文本节点:通过XPath的//text()查询,只获取HTML中的纯文本内容,不会触碰任何标签节点,从根源上保证标签不受改动。
  • 编码兼容:加载HTML前添加<?xml encoding="UTF-8">声明,确保中文等非ASCII字符不会出现乱码问题。

效果验证

输入你提供的示例内容后,输出结果会是:

<p> sample text with equation like b&lt;a or text &lt;inside&gt; brackets </p>

完全保留了<p>标签,同时把文本里的b<a和<inside>中的尖括号转成了实体,符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:43:24