请注意大小写:
$a = Array ('JiL不是吧');
$b = array("<a href='aa'><u>JiL不是吧</u></a>");
$body = "JiL不是吧 其它内容Jil不是吧JIl不是吧 JiL不是吧 其它内容 JIL不是吧JiL不是吧 Jil不是吧 JiL不是吧 JIL不是吧";我需要将$body中的 JiL不是吧 替换为 <a href='aa'><u>JiL不是吧</u></a> 保证$body中的文字不变 并能控制替换的数量 比如 控制2个链接 替换$body后的内容为:<a href='aa'>JiL不是吧</a>其它内容 <a href='aa'>Jil不是吧</a>JIl不是吧 JiL不是吧其它内容 JIL不是吧JiL不是吧 Jil不是吧 JiL不是吧 JIL不是吧 试了preg_replace和str_replace没能做出来

解决方案 »

  1.   


    $a = array ('JiL不是吧');
    $b = array("<a href='aa'><u>JiL不是吧</u></a>");
    $body = "JiL不是吧 其它内容Jil不是吧JIl不是吧 JiL不是吧 其它内容 JIL不是吧JiL不是吧 Jil不是吧 JiL不是吧 JIL不是吧";
    function newStrReplace($m)
    {
    static $num = NULL;
    if($num++ < $GLOBALS['count'])
    {
    return $GLOBALS['b'][0];
    }
    else
    {
    return $m[0];
    }
    }
    $count = 1;//替换数量
    echo preg_replace_callback('#' . $a[0] . '#', 'newStrReplace', $body);
      

  2.   

    当数量2时 结果为:
    <a href='aa'><u>JiL不是吧</u></a> 其它内容Jil不是吧JIl不是吧 <a href='aa'><u>JiL不是吧</u></a> 其它内容 JIL不是吧JiL不是吧 Jil不是吧 JiL不是吧 JIL不是吧Jil不是吧没有替换哦 不管大小写都替换 结果应该是这样才对:
    <a href='aa'><u>JiL不是吧</u></a> 其它内容<a href='aa'><u>Jil不是吧</u></a>JIl不是吧 JiL不是吧 其它内容 JIL不是吧JiL不是吧 Jil不是吧 JiL不是吧 JIL不是吧
      

  3.   

    preg_replace_callback('#' . $a[0] . '#i', 'newStrReplace', $body);//加一个i
      

  4.   

    还是贴下我搞的函数 请帮我看下问题在哪里谢谢
    传进函数的变量为:$words = Array ('JiL不是吧','aoc显示器') ;
    $result = array("<a href='aa'><u>JiL不是吧</u></a>","<a href='bb'><u>aoc显示器</u></a>
    ");
    $string = "JiL不是吧 Jil不是吧JIl不是吧 JiL不是吧 JIL不是吧
    aoc显示器 aoC显示器 AoC显示器AOC显示器aOC显示器
    一键更新网站
    huasuo老鼠 HuaSuo老鼠
    欢迎使用DEDECMS 欢迎使用DeDECMS 欢迎使用dedecms
    dnf免费外挂 dNf免费外挂 DNf免费外挂 DNF免费外挂JiL不是吧 Jil不是吧 JiL不是吧 JIL不是吧
    aoc显示器 aoC显示器 AoC显示器AOC显示器aOC显示器
    一键更新网站"; /**
          +----------------------------------------------------------
          * 函数 getbody
          +----------------------------------------------------------
          * @access public
          +----------------------------------------------------------
          * @param string 文档整篇内容
          * @param $words 关键字
          * @param $result keysword表关键字带连接
          * @param $pre 分隔符
          +----------------------------------------------------------
          * @return string
          +----------------------------------------------------------
      */
    function getbody($string, $words, $result, $pre)
    {
    //正则查找关键字在整篇文档中出现次数不区分大小写
    global $cfg_replace_num; //int型 比如2

    $sys_num = $cfg_replace_num;//临时数量 后台设置的关键字
    foreach ($words as $k=>$v)
    {
    $url = "";//重置初始化
    $p = preg_match_all('/'.$v.'/i',$string,$str,PREG_SET_ORDER);//提取关键字
    preg_match_all('/<a\shref=\'(.*)\'>/',$result[$k],$url); //替换关键字连接
    $url = $url[1][0];
    if (count($str)<$sys_num) //如果关键字小于系统设置的数量则全部替换 
    {
    $num = count($str);
    }
    else if (intval($sys_num)==0) //后台关键字数量为0 则全部替换
    {
    $num = count($str);

    else 
    {
    $num = $sys_num;
    }
    for ($i=0;$i<$num;$i++)
    {
    $name = $str[$i][0];
    //就是这里有问题 两种方法都不行
    //$string = str_replace($str[$i][0],"<a href='$url'>$name</a>",$string); //加链接区分大小写
    $string = preg_replace('/'.$str[$i][0].'/',"<a href='$url'>$name</a>",$string); //加链接区分大小写
    $name = "";
    } }
    return $string;
    }
      

  5.   

    加个i不区分大小写就把Jil不是吧 替换成了 JiL不是吧 不行....
      

  6.   


    if($num++ < $GLOBALS['count'])
    {
    return "<a href='aa'><u>" . $m[0] . "</u></a>";//这一句改一下
    }
    需求一步说清楚,,,你如果干这一行,仔细想想,应该也能改出来
      

  7.   


    <?php
    $body = "JiL不是吧 其它内容Jil不是吧JIl不是吧 JiL不是吧 其它ffff内容 JIL不是ffff吧JiL不是吧 Jil不是吧 JiL不是吧 JIL不是吧";
    echo preg_replace("#(JiL不是吧)#i","<a href='aa'><u>\\1</u></a>",$body,2);
    ?>