Chinaunix

标题: 半个汉字变问号,求解决办法. [打印本页]

作者: snowall    时间: 2003-06-06 21:27
标题: 半个汉字变问号,求解决办法.
一句话中截取一部分,则有可能会出现半个汉字,则显示为问号.
若全是汉字,则可截取偶数字节,但有可以有标点符号,空格之类的就不好办了,求解决办法.
作者: 77    时间: 2003-06-07 00:31
标题: 半个汉字变问号,求解决办法.
这个问题我以前也遇到过,不过最后采取了再加一个字段放摘要的办法 ,还是没解决啊
作者: HonestQiao    时间: 2003-06-07 10:36
标题: 半个汉字变问号,求解决办法.
其实是有办法的,不过比较的笨啊。

思路如下:
1、确定截取长度 ln , 和中文字符标志 ck(ck=0)
2、从开头开始逐个读取字符,如果其ord>;0xa0,那么设置ck++,读取直到ln
3、如果ck为奇数,那么读取ln+1或者ln-1个字符,否则读取ln个字符
作者: wubai    时间: 2003-06-09 08:51
标题: 半个汉字变问号,求解决办法.
原帖由 "snowall" 发表:
一句话中截取一部分,则有可能会出现半个汉字,则显示为问号.
若全是汉字,则可截取偶数字节,但有可以有标点符号,空格之类的就不好办了,求解决办法.
   

/**
* 截取中文部分字符串
*
* 截取指定字符串指定长度的函数,该函数可自动判定中英文,不会出现乱码
*
* @access public
* @param string    $str    要处理的字符串
* @param int       $strlen 要截取的长度默认为10
* @param string    $other  是否要加上省略号,默认会加上
* @return string
*/
function showtitle($str,$strlen=10,$other=true) {
    for($i=0;$i<$strlen;$i++)
      if(ord(substr($str,$i,1))>;0xa0) $j++;
    if($j%2!=0) $strlen++;
    $rstr=substr($str,0,$strlen);
    if (strlen($str)>;$strlen && $other) {$rstr.='...';}
    return $rstr;
}
作者: echomeng    时间: 2003-06-13 17:17
标题: 半个汉字变问号,求解决办法.
我也做了一个,用于显示文件名

        $tmp_maxlen=22;
        if (strlen($tmp_file)>;$tmp_maxlen){
                $i=0;
                $ii=0;
                while ($i<strlen($tmp_file)){
                        if (ord(substr($tmp_file,$i,1))>;127){$ii++;}
                        if (($i>;=$tmp_maxlen-3)&&($ii%2==0)){
                                $tmp_dispname=substr($tmp_file,0,$i-1).'...';
                                break;
                        }
                        $i++;
                }
        }else{$tmp_dispname=$tmp_file;}
作者: 信天翁    时间: 2003-06-14 00:47
标题: 半个汉字变问号,求解决办法.
  1. function mycopy($string,$num)//截取汉字字符串
  2. {
  3.     //2002-08-19
  4.     //注意:汉字第二位可能小于0xa0 !!
  5.     //如 朱镕基 镕字编码不规范;

  6.     if ($num>;strlen($string)) $num=strlen($string);
  7.     $j=0;
  8.     for($i=0;$i<$num;$i++){
  9.       if(ord(substr($string,$i,1))>;0xa0){
  10.          $j++;
  11.          if ($i<($num-1)){
  12.             $i++;
  13.             $j++;
  14.          }
  15.       }
  16.     }

  17.     if($j%2!=0) $num++;
  18.     $str=substr($string,0,$num);
  19.     return $str;
  20. }
复制代码

作者: pangty    时间: 2003-07-01 09:16
标题: 半个汉字变问号,求解决办法.
我的方法:

  1. // 截取汉字文本串并保持汉字完整
  2. function mysubstr($str, $N) {
  3.         if (strlen($str) <= $N) return $str;
  4.        
  5.         $i = 0;
  6.         $tmp = "";
  7.         while ($i <= $N) {
  8.                 if (ord(substr($str,$i,1)) >; 127) {
  9.                         $tmp .= substr($str,$i,2);
  10.                         $i = $i + 2;
  11.                 } else {
  12.                         $tmp .= substr($str,$i,1);
  13.                         $i = $i + 1;
  14.                     }
  15.             }
  16.    
  17.         return $tmp;
  18. }
复制代码

作者: 夜猫子    时间: 2003-07-01 17:31
标题: 半个汉字变问号,求解决办法.
哈哈!!!!
开始我也打算和你们一样解决的,最后我发觉有Multi-Byte String Functions。
http://www.php.net/manual/en/ref.mbstring.php
作者: 夜猫子    时间: 2003-07-01 18:03
标题: 半个汉字变问号,求解决办法.

  1. <?php
  2. $test = "这是1个用来测试的中文字符串";

  3. echo mb_substr($test, 0, 6, "EUC-JP");

  4. echo "<br>;<br>;";

  5. echo substr($test, 0, 6);
  6. ?>;
复制代码


没有EUC-CN,只好EUC-JP了
作者: redfox    时间: 2003-07-01 22:35
标题: 半个汉字变问号,求解决办法.
原来还有这好东东。
作者: lenruobin    时间: 2003-07-02 14:25
标题: 半个汉字变问号,求解决办法.
Fatal error: Call to undefined function: mb_substr() in E:\3.php on line 3
作者: 夜猫子    时间: 2003-07-02 17:24
标题: 半个汉字变问号,求解决办法.
编译的时候要加上:--enable-mbstring
作者: 巴豆    时间: 2003-10-29 16:43
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2