function SubChineseStr($String,$num)
{
$i = 0;
while($i<$num)
{
if(ord(substr($String,$i,1)) >0xa0) $i++;
$i++;
}
$str=substr($String,0,$i);
return $str;
}
{
$i = 0;
while($i<$num)
{
if(ord(substr($String,$i,1)) >0xa0) $i++;
$i++;
}
$str=substr($String,0,$i);
return $str;
}
解决方案 »
- 高手请进!!在线等~~~有无直接的SQL语句可以解决问题呢?
- 发表文章的工具栏怎么做?
- ajax预加载页面的问题。
- nodeValue赋值时加上<![CDATA[]]>
- 请介绍免费的电子商务网站的代码(php+mysql)
- 关于php中执行linux命令的问题
- 求救!如何解决在数据库中正确的取出给定数目的中文字符的问题,(php and mysql for windows)
- 我郁闷了呀:( 一个正则表达式的问题 PHP,preg_match
- 提供php支持免费空间,送一二级域名
- 关于 PHP 弹出 用户登陆对话框的问题,,载线等待,100 !!!
- 文件存储和数据库存储,哪个占用的空间更大?
- 谁知道有什么开源的PHP Mail
各位处理中文的时候还是先看看手册上Multibyte String这部分
linux下的话加参数重新编译PHP, 具体参数见
http://www.php.net/manual/zh/ref.mbstring.php
加这句吧
你们有linux的管理员吗, 还是告诉管理员让他来编译吧
//下面两个函数让字符截取的时候不出现乱码
function findPos($str,$start,$len){
for($pos=0,$i=$start;$pos<$len;$i++,$pos++)
if(ord(substr($str,$i,1))>=128&&ord(substr($str,$i+1,1))>=64)
$i++;
return $i;
}
function m_substr($str,$start,$len){
$startPos=findPos($str,0,$start);//用到上面的函数
$endPos=findPos($str,$startPos,$len);
return substr($str,$startPos,$endPos-$startPos);
}
/*例子:
* $str = "我4cx是e中guoren2";
* print $r_str = m_substr($str,1,2);
* 输出:4c
* print substr($str,1,2);
* 输出:?
*/
?>
要如何解决?
$string="满分!《魔兽世界》“最强玩家”种子选手诞生";我这里用楼上大哥的代码,总是解决不了乱码的问题,急啊!
{
$totlelength = strlen($str);
//特例情况
if ($len == null) $len = $totlelength;
if ($len ==0) return "";
if ($len >= $totlelength && $start == 0 ) return $str;
if ($start > $totlelength) return ""; //分析$start
if ($start < 0 )//$start<0时,转化为$start>0时的定位.
{
if ( abs($start) >= $totlelength ) $start = 0;
else $start = $totlelength - abs($start);
}
//确定起始位置,当起始位拆分某汉字时,返回值包含此汉字.
if ($start > 0)
{
$i = $start-1; $flag = -1; while ($i >= 0)
{
if ( ord(substr($str,$i,1)) > 160)
{
$flag = -1*$flag;
}
else break;
$i--;
}
if($flag==1)
{
$start = $start - 1;
$len++; //保证不位移.
}
} $str = substr($str,$start);//截除字符串$str的$start位前的字符
$totlelength = strlen($str); //确定结束位置,当结束位拆分某汉字时,返回值不包含此汉字.
if ($len<0) $len = $totlelength - abs($len);
if ($len <= 0) return "";
$i=min($len,$totlelength);
$i--;
$flag = -1;
while ($i >= 0){
if (ord(substr($str,$i,1))>160){
$flag=-1*$flag;
}else break;
$i--;
}
if($flag == 1)$len=$len-1;
$subit=substr($str,0,$len);
return $subit;
}
*
* 文件名称: CSubstr.inc
* 作 用: 截取指点长度的中文字符
* 作 者: PHPX.COM--PHP论坛
*
* 参 数: $str : 所要截取的字符
* $start: 开始字符
* $len : 截取长度,汉字
*
*****************************************************/
function csubstr($str,$start,$len){
$strlen = strlen($str);
$clen = 0;
for($i = 0; $i < $strlen; $i++,$clen++) {
if ($clen >= $start+$len) break;
if(ord(substr($str,$i,1)) > 0xa0) {
if ($clen >= $start)
$tmpstr .= substr($str,$i,2);
$i++;
}else{
if ($clen >= $start)
$tmpstr .= substr($str,$i,1);
}
}
return $tmpstr;
}
不知你用的什么IDE环境,总之在IDE里面把编码方式改为utf-8,然后重新启动程序,这样,你的IDE就会总是以utf-8的编码方式来加载你的程序了。
郁闷啊。
函数需要php_mbstring模块支持