求救,print 显示中文字符的困扰~~~~
我在做一个显示列表的功能,其中有一个备注字段,由于字段长度限制,我最后让其显示备注字段值一部分,也就是说,只让显示其十个字符,我采用<?phh print substr($s_v_content, 0, 20);?>,不如问题来了,当这些字符中用标点符号,或者,英文字母,或者是数字时,(主要是占半个字符)如果是奇数位,最后显示的效果总会有 这样的符号,请问如何去掉这个符号,谢谢!!! 问题点数:20、回复次数:17Top
1 楼liuyumu(猫仔队长)回复于 2005-10-19 14:00:01 得分 0
不要使用substr, 使用mb_substr函数,是几个字符就截取几个。 mb_substr函数支持编码方式(GB2312, UTF-8)。Top
2 楼weisun(巍巍)回复于 2005-10-19 14:09:11 得分 0
我用了mb_substr().可是系统报错,说是用了未定义的函数!Top
3 楼zhongjihang()回复于 2005-10-19 14:17:19 得分 0
我使用的是php5,说没定义mb_substr()函数,不会是不支持吧Top
4 楼zhongjihang()回复于 2005-10-19 14:22:08 得分 0
我试了一下,PHP4是可以的,不过总返回个1
PHP5不行
不知道你们的会不会有这种情况Top
5 楼yh801216(艾奥利斯)回复于 2005-10-19 14:32:22 得分 0
加载mb库没有啊。
另外,不用它也一样可以做到。呵呵,那就是中文编码的问题了,呵呵ord($str[$i])是否小于128。
呵呵Top
6 楼weisun(巍巍)回复于 2005-10-19 14:39:04 得分 0
为什么还是没有人来实际解决呢,都等不及了Top
7 楼ipsearch2008(ipsearch)回复于 2005-10-19 15:03:45 得分 0
用自己写的函数:
function sub_str($str,$len){
$str = (string)$str;
$len = (int)$len;
$strlen = strlen($str);
if($len>$strlen) $len = $strlen;
$i = 0;
$fixlen = 0;
while($i<$len){
$chr = $str[$i];
$i++;
if(ord($chr)<0x80) $fixlen++;
elseif($i<$len){
$i++;
$fixlen += 2;
}
}
return substr($str,0,$fixlen);
}
<?phh print sub_str($s_v_content, 0, 20);?>,Top
8 楼xuzuning(唠叨)回复于 2005-10-19 17:07:20 得分 0
print iconv_substr($s_v_content, 0, 20, 'gbk');
php5中内嵌iconv函数组,不需要另外加载
哈哈,php5想把日本鬼子赶出php舞台啦!
Top
9 楼weisun(巍巍)回复于 2005-10-20 09:35:48 得分 0
不行啊,我现在用的是老的PHP,4.X版本的,在原来系统中进行修改的,所以不可能对PHP进行配置或加载的,各位大侠行行好,还有没有简单易行的方法!!Top
10 楼zhongjihang()回复于 2005-10-20 12:48:45 得分 0
我怎么用substr()也不会出现 这种情况啊
奇数什么都试了
不过用 iconv_substr($s_v_content, 0, 20, 'gbk')中文也算一个字符
也还挺方便的Top
11 楼weisun(巍巍)回复于 2005-10-20 13:16:23 得分 0
我想这个问题,对PHP程序员来说,也不算是难事,为什么就没人解答呢,郁闷!!!Top
12 楼dxflingxing(dxf零星)回复于 2005-10-20 14:38:06 得分 0
ipsearch2008(ipsearch)已经给出你代码了啊,
还不结帐,呵呵Top
13 楼weisun(巍巍)回复于 2005-10-20 16:31:07 得分 0
还是不行ipsearch2008(ipsearch)的代码,似呼没什么变化,还是会出现 Top
14 楼szhnet(阿华)回复于 2005-10-21 09:32:53 得分 0
朋友,请关注一下此帖:
http://community.csdn.net/Expert/topic/4338/4338855.xml?temp=.8305628Top
15 楼wjjchen(redfox)回复于 2005-10-24 13:48:35 得分 0
唠叨以前发的。
<?
//用法与substr函数一样
function c_substr($str,$start=0) {
$ch = chr(127);
$p = array("/[\x81-\xfe]([\x81-\xfe]|[\x40-\xfe])/","/[\x01-\x77]/");
$r = array("","");
if(func_num_args() > 2)
$end = func_get_arg(2);
else
$end = strlen($str);
if($start < 0)
$start += $end;
if($start > 0) {
$s = substr($str,0,$start);
if($s[strlen($s)-1] > $ch) {
$s = preg_replace($p,$r,$s);
$start += strlen($s);
}
}
$s = substr($str,$start,$end);
$end = strlen($s);
if($s[$end-1] > $ch) {
$s = preg_replace($p,$r,$s);
$end += strlen($s);
}
return substr($str,$start,$end);
}
?>Top
16 楼weisun(巍巍)回复于 2005-10-27 14:25:53 得分 0
没看懂.不知道怎么用!!Top
17 楼wjjchen(redfox)回复于 2005-11-09 12:26:42 得分 0
substr你怎么用,这个函数就怎么用。Top




