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

ACF文本区域字段开启自动加段落时如何转义输出并保留自定义CSS类?

以下两种方案都可以实现安全转义输出的同时,保留你设置的p标签自定义类:

方案1:使用WordPress官方wp_kses白名单过滤(无需修改现有ACF字段设置)

该方案通过指定允许的HTML标签和属性白名单,过滤掉所有恶意内容,仅保留合法的带自定义类的p标签输出,适配你当前的ACF配置:

<?php
$notice = '<p class="footer__paragraph">Some text.</p>';
$text = get_field( 'text', 'option' );
if ( $text ) {
    // 为p标签添加自定义类
    $text_with_class = str_replace( '<p>', '<p class="footer__paragraph">', $text );
    // 定义白名单:仅允许带class属性的p标签存在
    $allowed_html = [
        'p' => [
            'class' => [],
        ],
    ];
    // 过滤后输出,自动移除所有不在白名单内的标签和属性
    echo wp_kses( $text_with_class, $allowed_html );
} else {
    echo $notice;
}
?>

方案2:手动控制格式化逻辑(安全性更高)

你可以先修改ACF Text Area字段的「New Lines」选项为「No Formatting」(不自动格式化),在代码中手动完成转义、换行转段落的逻辑,完全掌握输出流程,避免str_replace可能出现的误匹配问题:

<?php
$notice = '<p class="footer__paragraph">Some text.</p>';
// 获取未经过自动格式化的纯文本内容
$raw_text = get_field( 'text', 'option' );
if ( $raw_text ) {
    // 先对纯文本做转义处理,规避XSS风险
    $escaped_text = esc_html( $raw_text );
    // 按换行拆分内容,逐行生成带自定义类的p标签
    $paragraph_lines = explode( "\n", $escaped_text );
    foreach ( $paragraph_lines as $line ) {
        $trimmed_line = trim( $line );
        if ( ! empty( $trimmed_line ) ) {
            echo '<p class="footer__paragraph">' . $trimmed_line . '</p>';
        }
    }
} else {
    echo $notice;
}
?>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:18:01