PHP截取中文字符串的问题
2015-01-24信息快讯网
程序说明:
1. len 参数以中文字符为标准,1len等于2个英文字符,为了形式上好看些
2. 如果将magic参数设为false,则中文和英文同等看待,取绝对的字符数
3. 特别适用于用htmlspecialchars()进行过编码的字符串
4. 能正确处理GB2312中实体字符模式()
程序代码:
function FSubstr($title,$start,$len="",$magic=true)
{
/**
* powered by Smartpig
* mailto:[email protected]
*/
$length = 0;
if($len == "") $len = strlen($title);
//判断起始为不正确位置
if($start > 0)
{
$cnum = 0;
for($i=0;$i<$start;$i++)
{
if(ord(substr($title,$i,1)) >= 128) $cnum ++;
}
if($cnum%2 != 0) $start--;
unset($cnum);
}
if(strlen($title)<=$len) return substr($title,$start,$len);
$alen = 0;
$blen = 0;
$realnum = 0;
for($i=$start;$i<strlen($title);$i++)
{
$ctype = 0;
$cstep = 0;
$cur = substr($title,$i,1);
if($cur == "&")
{
if(substr($title,$i,4) == "<")
{
$cstep = 4;
$length += 4;
$i += 3;
$realnum ++;
if($magic)
{
$alen ++;
}
}
else if(substr($title,$i,4) == ">")
{
$cstep = 4;
$length += 4;
$i += 3;
$realnum ++;
if($magic)
{
$alen ++;
}
}
else if(substr($title,$i,5) == "&")
{
$cstep = 5;
$length += 5;
$i += 4;
$realnum ++;
if($magic)
{
$alen ++;
}
}
else if(substr($title,$i,6) == """)
{
$cstep = 6;
$length += 6;
$i += 5;
$realnum ++;
if($magic)
{
$alen ++;
}
}
else if(substr($title,$i,6) == "'")
{
$cstep = 6;
$length += 6;
$i += 5;
$realnum ++;
if($magic)
{
$alen ++;
}
}
else if(preg_match("/(\d+);/i",substr($title,$i,8),$match))
{
$cstep = strlen($match[0]);
$length += strlen($match[0]);
$i += strlen($match[0])-1;
$realnum ++;
if($magic)
{
$blen ++;
$ctype = 1;
}
}
}else{
if(ord($cur)>=128)
{
$cstep = 2;
$length += 2;
$i += 1;
$realnum ++;
if($magic)
{
$blen ++;
$ctype = 1;
}
}else{
$cstep = 1;
$length +=1;
$realnum ++;
if($magic)
{
$alen++;
}
}
}
if($magic)
{
if(($blen*2+$alen) == ($len*2)) break;
if(($blen*2+$alen) == ($len*2+1))
{
if($ctype == 1)
{
$length -= $cstep;
break;
}else{
break;
}
}
}else{
if($realnum == $len) break;
}
}
unset($cur);
unset($alen);
unset($blen);
unset($realnum);
unset($ctype);
unset($cstep);
return substr($title,$start,$length);
}
php mssql 日期出现中文字符的解决方法
中英文字符串翻转函数
php实现的简单压缩英文字符串的代码
php中文字符截取防乱码
php中支持多种编码的中文字符串截取函数!
php中的一个中文字符串截取函数
php字符串截取问题
用PHP中的 == 运算符进行字符串比较
phpmyadmin的#1251问题
PHP 常见郁闷问题答解
如何使用PHP中的字符串函数
PHP+MySQL5.0中文乱码解决方法
Apache2 httpd.conf 中文版
php.ini 中文版
一个可以找出源代码中所有中文的工具
一个可以删除字符串中HTML标记的PHP函数
从C/C++迁移到PHP――判断字符类型的函数
PHP中一个控制字符串输出的函数
PHP安装攻略:常见问题解答(一)
PHP安装攻略:常见问题解答(二)
繁体中文转换为简体中文的PHP函数
删除无限级目录与文件代码共享
PHP的十个高级技巧(上中下)第1/3页
最令PHP初学者头痛的十四个问题
PHP初学者头疼问题总结
Php部分常见问题总结第1/2页
上半年全国查处违反八项规定问题13920起
日本为何热炒“东海问题”
潘基文身边中文翻译是谁?上外毕业的上海人