我现在是
从数据库中取出的变量是
$str="加辣,加甜,加饭量,加多点饭啦"; (utf-8)
我要在字符串中间加一个换行.
现在我能加到.但是问题是:因为字符串有中文 和英文标点 所以在字符串中间 加多 \n的话
就出现了乱码了.<?
$str2="飯你;任吃;飯你;任吃;飯你;任吃;飯你;任吃;";
$str_count=mb_strlen($str2,'utf8') / 2;
$strSS_DD=wordwrap($str2,$str_count,"\\n",true);
echo $strSS_DD;
?>
<html>
<head>
<meta http-equiv="Content-Language" content="en" />
<meta name="GENERATOR" content="PHPEclipse 1.0" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script language="JavaScript" type="text/javascript">
  var a="1,0";
  var s=a.split(",");
  for(var i=0;i<s.length;i++)
  {
//   alert(s[i]);
   if(s[i]>0)
   {
break;
   }
  }
  alert("<?=$strSS_DD?>");
</script><title>title</title>
</head>
<body bgcolor="#FFFFFF" text="#000000" link="#FF9966" vlink="#FF9966" alink="#FFCC99"></body>
</html>

解决方案 »

  1.   


    <?
    $str2="飯你;任吃;飯你;任吃;飯你;任吃;飯你;任吃;";
    $str_count=mb_strlen($str2,'utf8') / 2;
    //$strSS_DD=wordwrap($str2,$str_count,"\\n",true);
    $strSS_DD=str_replace(';', ';\\r\\n', $str2);
    echo $strSS_DD;
    ?>
    <html>
    <head>
    <meta http-equiv="Content-Language" content="en" />
    <meta name="GENERATOR" content="PHPEclipse 1.0" />
    <meta http-equiv="Content-Type" content="text/html; charset=gbk" />
    <script language="JavaScript" type="text/javascript">
      var a="1,0";
      var s=a.split(",");
      for(var i=0;i<s.length;i++)
      {
    //      alert(s[i]);
          if(s[i]>0)
          {
            break;
          }
      }
      alert("<?=$strSS_DD?>");
    </script><title>title</title>
    </head>
    <body bgcolor="#FFFFFF" text="#000000" link="#FF9966" vlink="#FF9966" alink="#FFCC99"></body>
    </html>
    这样不行么?
      

  2.   

    $str_count表示什么?为什么要/2?
    mb_strlen计算出来的本来就是字符数而不是字节数,而且一个字是3字节wordwrap是根据字节数,你要自己写函数来做这个
    如果你是根据;来加\n的,可以$str = str_replace(';', ';\\n', $str);
      

  3.   

    网上找到的“PHP分割(切割)中文字符串gb2312_substr,防止被截断”
    http://www.pczpg.com/a/2010/0223/1658.html
      

  4.   

    那你可以用mb_substr截取
    前一段,加上\n,再加上后一段
      

  5.   


    +的确,如果单纯往里面加\n就会出现论吗,琢磨了下,就是mb_strlen()的问题
      

  6.   

    function gb2312_substr($string, $start = 0, $len = 10)
    你先安装你要求的长度分割这个字符串,然后加换行符再连起来不就行了。
      

  7.   

    $str2="飯你;任吃;飯你;任吃;飯你;任吃;飯你;任吃;aac-2";
    $str_count = mb_strlen($str2,'utf-8');//utf-8,不是utf8,不要搞错咯。
    $mid    = ceil($str_count/2);
    echo mb_substr($str2,0,$mid,'utf-8')."<br/>".mb_substr($str2,$mid,$str_count,'utf-8');//不用wordwrap
      

  8.   

    $len = mb_strlen($str, 'utf-8');
    $pos = floor($len / 2);
    $newstr = mb_substr($str, 0, $pos, 'utf-8').'\\n'.mb_substr($str, $pos, $len - $pos, 'utf-8');
      

  9.   


    <?
    $str2="我要;华丽的;换行;真的不;能成功吗";
    //$str3="飯你;任吃;飯你;任吃;飯你;任吃;飯你;任吃;";
    $str_count=gb2312_strlen($str2)/2;
    echo $str_count."<br/>";
    $strSS_DD=gb2312_substr($str2,0,$str_count)."<br/>".gb2312_substr($str2,$str_count,gb2312_strlen($str2));echo $strSS_DD;
    /*********************************************************************
    * 统计中文字符串长度                                                *
    * 调用方法 gb2312_strlen("要统计的字符串")                          *
    * JspBoy 完成于 2007年12月14日 正在完善……                        *
    *********************************************************************/
    function gb2312_strlen($string)
    {
    $str_len = strlen($string);
    $str_count = 0;
    for($j = 0; $j < $str_len; $j++)
    {
       if(ord($string{$j}) < 127)
       {
        $str_count += 1;
        continue;
       }
       else
       {
        if(ord($string{$j+1}) > 127)
        {
         $str_count += 1;
         $j++;
         continue;
        }
        else
        {
         $str_count += 1;
         continue;
        }
       }
    }
    return $str_count;
    }
    /*********************************************************************
    * 分割中文字符串                                                    *
    * 调用方法 gb2312_substr("要分割的字符串", "开始位置", "结束位置") *
    * JspBoy 完成于 2007年12月14日 正在完善……                        *
    *********************************************************************/
    function gb2312_substr($string, $start = 0, $len = 10)
    {
    $end = $start + $len;
    $str_len = strlen($string);
    if($end > $str_len)
    {
       return $string;
    }
    $start_count = 0;
    //找开始位置
    for($j = 0; $j < $str_len; $j++)
    {
       if($start_count >= $start)
       {
        break;
       }
       if(ord($string{$j}) < 127)
       {
        $start_count += 1;
        continue;
       }
       else
       {
        if(ord($string{$j+1}) > 127)
        {
         $start_count += 1;
         $j++;
         continue;
        }
        else
        {
         $start_count += 1;
         continue;
        }
       }
    }
    //取字符
    $s = '';
    $result_count = 0;
    for($i = $j; $i < $str_len; $i++)
    {
       if($result_count >= $len)
       {
        break;
       }
       if(ord($string{$i}) < 127)
       {
        $s .= $string{$i};
        $result_count += 1;
        continue;
       }
       else
       {
        if(ord($string{$i+1}) > 127)
        {
         $s .= $string{$i} . $string{++$i};
         $result_count += 1;
         continue;
        }
        else
        {
         continue;
        }
       }
    }
    return $s;
    }
    ?>
      

  10.   

    14楼 和15楼 搞定收工...
    同时也谢谢其他phper....