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

PHP字符串互换替换异常求助:Cart与Bag互替换结果不符

问题原因

你当前的代码之所以会把所有Cart和Bag都变成Bag,是因为str_ireplace处理数组替换时是按顺序执行的:

  1. 先把所有Bag替换成Cart,此时原有的Bag变成了Cart
  2. 接着把所有Cart(包括刚从Bag替换来的)替换成Bag
    最后所有目标字符串都被二次替换成了Bag。
修正方案

方案1:使用临时占位符(简单直接)

通过一个不会出现在文本中的临时字符串作为中转,避免互相覆盖:

add_filter( 'gettext', function ( $strings ) {
    // 第一步:把Bag替换成临时占位符
    $strings = str_ireplace( 'Bag', '__TEMP_REPLACE__', $strings );
    // 第二步:把Cart替换成Bag
    $strings = str_ireplace( 'Cart', 'Bag', $strings );
    // 第三步:把临时占位符替换成Cart
    $strings = str_ireplace( '__TEMP_REPLACE__', 'Cart', $strings );
    
    return $strings;
}, 20 );

方案2:使用正则回调(适合精确匹配单词)

如果需要只替换独立的Bag/Cart单词(避免替换类似ShoppingBag这类包含目标字符串的词),可以用preg_replace_callback:

add_filter( 'gettext', function ( $strings ) {
    // \b 表示单词边界,确保只匹配独立的Bag/Cart
    return preg_replace_callback('/\b(Bag|Cart)\b/i', function($matches) {
        // 判断匹配到的内容,返回对应的替换值
        return strtolower($matches[0]) === 'bag' ? 'Cart' : 'Bag';
    }, $strings);
}, 20 );

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 09:02:09