UTF8下的中文PHP编程(2)

分类: Mysql   出处:iocblog整理  更新时间:2008-07-28   添加到收藏  

再如:

echo "我是凉鞋";
这个明显有中文字符输出……
您还是老老实实转换为 utf8 吧……

当然现在很多程式都采用模板(语言包)技术……
程式(非语言包文件)里是看不到任何供输出的字符的……
这样以来我们只需要将语言包文件转成 utf8 编码即可……
(语言包的优势就在这里啊…… 啊哈哈哈哈哈……)
'http://www.knowsky.com
==================================================

utf8 中文截取

由于 utf8 使用三个字节……
所以传统的 substr 函数就没辙了……
很多高手都写了 utf8 中文字符截取函数……
这里送上几种:

1.先算再取

/**
* author : dummy | zandy
* email : lianxiwoo@gmail.com | hotmail.com
* create : 200512
* usage : echo join('', string::substring_utf8('汉字', 0, 1));
*/
ini_set('display_errors', 1);
error_reporting(e_all ^ e_notice);
class string {
function substring_utf8($str, $start, $lenth)
{
$len = strlen($str);
$r = array();
$n = 0;
$m = 0;
for($i = 0; $i < $len; $i++) {
$x = substr($str, $i, 1);
$a = base_convert(ord($x), 10, 2);
$a = substr('00000000'.$a, -8);
if ($n < $start){
if (substr($a, 0, 1) == 0) {
}elseif (substr($a, 0, 3) == 110) {
$i += 1;
}elseif (substr($a, 0, 4) == 1110) {
$i += 2;
}
$n++;
}else{
if (substr($a, 0, 1) == 0) {
$r[] = substr($str, $i, 1);
}elseif (substr($a, 0, 3) == 110) {
$r[] = substr($str, $i, 2);
$i += 1;
}elseif (substr($a, 0, 4) == 1110) {
$r[] = substr($str, $i, 3);
$i += 2;
}else{
$r[] = '';
}
if (++$m >= $lenth){
break;
}
}
}
return $r;
} // end substring_utf8
}// end string
echo join('', string::substring_utf8('汉字', 0, 1));
2.先截后取
这种方式凉鞋觉得很巧妙……
用传统截取函数先截断……
然后判断中文单个字符是否被分割开……
如果是……则处理之……
要特别注意的是 substr 函数的第三个参数必须大于 3 ……
至于为什么不用凉鞋解释了吧?(来源 www.iocblog.net)

// a trim function to remove the last character of a utf-8 string
// by following instructions on http://en.wikipedia.org/wiki/utf-8
// dotann
// usage: $str = utf8_trim(substr($str,0,50));
function utf8_trim($str) {
$len = strlen($str);
for ($i=strlen($str)-1; $i>=0; $i-=1){
$hex .= ' '.ord($str[$i]);
$ch = ord($str[$i]);
if (($ch & 128)==0) return(substr($str,0,$i));(来源 www.iocblog.net)
if (($ch & 192)==192) return(substr($str,0,$i));
}
return($str.$hex);
}
$str = '汉字';
echo utf8_trim(substr($str,0,3));
3.还有其它方法,
比如 007pig 为我们 vbulletin 中文版里所写的函数……
短小精悍……
源码不便放出……
对不住鸟……

今天就写到这里吧……
还有转码等问题没有写……
最近忙……
有空继续整理……
http://www.quchao.com/?p=6&pp=1

上一页 [1] [2]



文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。