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

WordPress本地化JS时HTML实体转义问题求助

解决WordPress wp_localize_script自动解码HTML实体的问题

我之前也踩过这个一模一样的坑!wp_localize_script内部默认会对本地化数据执行html_entity_decode处理,直接把你想保留的&转成了&,完全打乱了预期格式。下面给你两个靠谱的解决方案:

方案1:用wp_add_inline_script替代wp_localize_script

这是最直接稳妥的方式,因为wp_add_inline_script不会自动解码HTML实体,能100%保留你需要的原始格式。代码示例:

// 先确保你的脚本已经注册并加载
wp_enqueue_script( 'main-js', get_template_directory_uri() . '/js/main.js', array(), '1.0', true );

// 准备本地化数据,保留原有的HTML实体
$main_localize_data = array(
    'homepage_typed_text' => __( 'Apples & Bananas', 'ewk' )
);

// 直接输出JS变量,绕过wp_localize_script的解码逻辑
wp_add_inline_script( 'main-js', 'var main_object = ' . wp_json_encode( $main_localize_data ) . ';', 'before' );

wp_json_encode会自动处理JS中的特殊字符,确保输出内容格式正确且安全,同时不会改动你原本的HTML实体结构。

方案2:通过钩子恢复被解码的实体

如果你一定要沿用wp_localize_script,可以借助wp_localize_script过滤器,在解码完成后把实体重新转回去。代码示例:

add_filter( 'wp_localize_script', function( $l10n, $handle, $data ) {
    // 只针对你的目标脚本处理,避免影响其他本地化内容
    if ( $handle !== 'main-js' ) {
        return $l10n;
    }

    // 将解码后的文本重新转义,还原原有的HTML实体格式
    if ( isset( $l10n['homepage_typed_text'] ) ) {
        $l10n['homepage_typed_text'] = htmlentities( $l10n['homepage_typed_text'], ENT_QUOTES, 'UTF-8' );
    }

    return $l10n;
}, 10, 3 );

// 正常调用wp_localize_script即可
wp_localize_script( 'main-js', 'main_object', array( 
    'homepage_typed_text' => __( 'Apples & Bananas', 'ewk' ) 
) );

这个方法的逻辑是:先让wp_localize_script完成默认解码,再通过过滤器把文本重新转义,恢复你需要的&格式。不过要注意,htmlentities会转义所有符合条件的字符,如果你有其他不需要转义的内容,可能需要做更精准的匹配处理。


内容的提问来源于stack exchange,提问作者Mr. Jo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:39:04