欢迎各位兄弟 发布技术文章
这里的技术是共享的
在 Drupal 7 中,如果 HTML 实体(如 <br />)被转义输出,而不是渲染为实际的 <br /> 标签,是因为内容被过滤或转义了。以下是几种 反转义 HTML 的方法:
check_markup() 强制解析 HTMLphp<?php print check_markup($field_value, 'full_html'); ?>
适用场景:直接从数据库读取的字段(如 $node->body[und][0]['value'])
作用:确保 HTML 标签(如 <br />)被正确解析
参数:
$field_value:存储的原始内容(可能含 <br />)
'full_html':使用 Full HTML 格式,避免过滤
htmlspecialchars_decode() 反转义 自己亲自做的OK 有大用如果内容被转义成 <br />,可以用 PHP 内置函数 htmlspecialchars_decode() 还原:
php<?php print htmlspecialchars_decode($field_value); ?>
适用场景:内容被 htmlspecialchars() 或 check_plain() 转义过
示例:
php$text = "Line 1<br />Line 2"; print htmlspecialchars_decode($text); // 输出:Line 1<br />Line 2
decode_entities()(Drupal 专用)Drupal 的 decode_entities() 可以还原 HTML 实体:
php<?php print decode_entities($field_value); ?>
适用场景:<br />、&nbsp; 等实体被转义
示例:
php$text = "First line&nbsp;<br />Second line"; print decode_entities($text); // 输出:First line <br />Second line
如果是在 Views 字段 中输出,可以在“重写结果”(Rewrite Results)中使用:
php<?php print htmlspecialchars_decode($output); ?>
或
php<?php print check_markup($output, 'full_html'); ?>
如果所有 <br /> 都被转义,可能是 输入格式 设置问题:
前往 admin/config/content/formats
检查使用的格式(如 Filtered HTML)
取消勾选:
❌ Convert line breaks into HTML(如果内容已经含 <br />,不要重复转换)
❌ Limit allowed HTML tags(可能过滤掉 <br />)
| 问题 | 解决方案 | 
|---|---|
| <br />被转义输出 | <?php print htmlspecialchars_decode($text); ?> | 
| 数据库存储的内容含 HTML 实体 | <?php print decode_entities($text); ?> | 
| Views 输出的字段被转义 | 在重写中使用 check_markup($output, 'full_html') | 
| 全局 HTML 过滤太严格 | 调整 admin/config/content/formats | 
使用 htmlspecialchars_decode() 或 check_markup() 是最直接的方法,确保 HTML 标签正常渲染。