关于substr取中文字串的乱码问题?
我用SUBSTR去最一段文本的一段.
从0取到20.但经常会有出现最后的一个中文字变成了"?"
我想是因为中文编码和英文编码不一样吧.
中文占两个字节.英文一个.然后读最后一个中文的时候不巧真好读了他一半的字节.然后就显示不出来了.所以变成了"?".因为最后一个字可能正好占20,21.要取到21才能正常显示.
所以想问一下.应该如何解决这个乱码问题??把0取到20改成21是没有用的.因为文本不是固定的.而且文本也是中英文混合的.
问题点数:20、回复次数:7Top
1 楼shuzai()回复于 2004-03-20 02:51:39 得分 0
just use mb_substr()Top
2 楼hahawen(变态的大龄青年)回复于 2004-03-20 08:06:32 得分 0
http://expert.csdn.net/Expert/FAQ/List_Room_FAQ_Index.asp?Roomid=303Top
3 楼ice_berg16(寻梦的稻草人)回复于 2004-03-20 08:14:54 得分 20
/* 函数 sub_str($text, $length)
** 功能 从文本中截取指定长度字符串,考虑了对中文的处理
** 参数 $text 要截取的文本
** 参数 $length 要截取的字符串长度
*/
function sub_str($text, $length)
{
for ($i=0; $i<$length; $i++)
{
$chr = substr($text, $i, 1);
if (ord($chr) > 0x80)//字符是中文
{
$length++;
$i++;
}
}
$str = substr($text, 0, $length);
return $str;
}Top
4 楼52juanjuan(Fibona)回复于 2004-03-20 08:50:27 得分 0
楼上的好方法Top
5 楼litao3029(凡人梦)回复于 2004-03-20 09:45:15 得分 0
markTop
6 楼wxq4100798(aa)回复于 2004-03-20 09:49:38 得分 0
呵呵,二楼的朋友函数和dicuz里面用的差不多哦
function wordscut($string, $length)
{
$wordscut="";
if(strlen($string) > $length)
{
for($i = 0; $i < $length - 3; $i++)
{
if(ord($string[$i]) > 127)
{
$wordscut .= $string[$i].$string[$i + 1];
$i++;
}
else
{
$wordscut .= $string[$i];
}
}
return $wordscut.' ...';
}
return $string;
}
Top
7 楼tigerhu76(虎虎)回复于 2004-09-10 10:51:19 得分 0
markTop
相关问题
- Apache+Tomcat url传递的中文字符串乱码问题
- WIN98里的文字乱码问题
- visio文字贴到word出现乱码
- 关于中文字符串编译,本机测试OK,上传上去乱码!分不够再加
- 求救:关于LINUX9+tomcat4.1.29下面的读取中文字符串响应乱码问题!!
- c#写的webservice,接收到的中文字符串全部变成乱码是怎么回事? 要怎么改?
- 急急急·高手帮忙,在Java中引用C++的动态链接库,中文字符串参数变成乱码,怎么办?
- 邹建和各位高手请进:如何用SQL查出字符串中的中文字符或乱码?谢谢
- jsp提交form后, 写入数据库为何含中文字符串的字段为乱码,如何结决,望高手指点
- 为什么邮件中的中文文字有时是乱码?





