PHP中文截取,UTF8和GBK详解
中文字符截取是一个十分有用的功能,在很多地方都会用到,比如提取定长标题,抽取标签等
由于各种字符集的存储方式的不一样,存在双字节(GBK)多字节(Unicode)的存储方式,这就导致了统一处理的困难。
国际标准UTF8字符编码中,存储中文字符要3个字节,即把php文件存储为UTF8编码格式可以得到
strlen("中")=3
假如直接用php的字符串函数去处理类似这个字符将可能产生乱友的情况,主要是由于在一个完整字符中间强制截断产生半字符的情况。要避免这种情况的唯一办法就是把截断位置延长到这个字符结束的位置进行截断
在PHP中,提供了mbstring模块功能,mbstring以字符作为操作的基本单元,如mb_strlen("中","utf-8")=1
。
大部分的mbstring都要求输入编码,当然可以在php环境中设置默认的编码。参数设置为mbstring.internal_encoding
= UTF-8, mbstring.http_input = UTF-8, mbstring.http_output =
UTF-8, mbstring.substitute_character =
UTF-8。由于php系统一般是存储字节来计算长度的,为了消除mbstring和string之间的差异,使用mbstring的时候就要格外小心
了。
假如不使用mbstring的功能 的话,可以自行编写中文字符处理的函数。
php中文截取函数,经网上搜索学习发现,大部分网络中都是以从开始位置一个一个完整字符来实现的。这有可能导致效率十分底。下面我写了个截取函数,是针对UTF8的
<?php
$str = "d中-在f在你是d我的国家困g在有和,人。工";
var_dump(strcut($str,0,9));
function strcut($str,$start,$len){
if($start < 0)
$start = strlen($str)+$start;
$retstart = $start+getOfFirstIndex($str,$start);
echo $retstart;
$retend = $start + $len -1 + getOfFirstIndex($str,$start + $len);
echo $retend;
return substr($str,$retstart,$retend-$retstart+1);
}
//判断字符开始的位置
function getOfFirstIndex($str,$start){
$char_aci = ord(substr($str,$start-1,1));
if(223<$char_aci && $char_aci<240)
return -1;
$char_aci = ord(substr($str,$start-2,1));
if(223<$char_aci && $char_aci<240)
return -2;
return 0;
}
?>
224-239是UTF8中文字符高位(第一位,共三位)ascii区间,换算成十六进制为0xE0 - 0xEF 二进制为1100 0000 - 1100 FFFF。通
相关文档:
随 着网站访问量的加大,每次从数据库读取都是以效率作为代价的,很多用ACCESS作数据库的更会深有体会,静态页加在搜索时,也会被优先考虑。互联网上流 行的做法是将数据源代码写入数据库再从数据库读取生成静态面,这样无形间就加大了数据库。将现有的ASP页直接生成静态页,将会节省很多。
下面的例子是将、index.asp?i ......
在为用户提供动态内容方面,PHP和MySQL是一个强大的组合。这些年来,这两项产品已经跨越了它们最初的应用舞台,现在,一些世界上最繁忙的网站也在应用它们。虽然它们当初都是开源软件,只能在UNIX/Linux上运行,但经过相当一段时期的发展,它们已能在Windows平台上运行。
在本文中,我将逐步为你们说明如何在Windows环境中 ......
<?php
class useful{
/*
* 常用函数类
* 作 者:多菜鸟
* 联系邮箱:kingerq AT msn DOT com
* 创建时间:2005-07-18
* 来源:http://blog.csdn.net/kingerq
*/
/*
* 功能:格式化数字,以标准MONEY格式输出
......
这几天在做一个用php收发邮件的项目,才发现有太多的东西要学了,为了以后方便,或者给还没有接触这方面的人方便,我把这些知识给记录下来。 先看看有哪些方法可以实现 php收发邮件。 1、用fsocket这种方法要用到pop3的命令,这种方法连接或者接收的速度比较快。 POP3命令码如下:
命令 参数 状态 描述
- ......
操作系统centos 5.3,php 5.1.6, xdebug 2.0.5。
主要参考文档:
xdebug的安装文档:http://xdebug.org/docs/install。
xdebug的远程调试配置文档:http://xdebug.org/docs/remote
Using vim and xdebug DBGp for debugging Drupal (or any PHP application):
http://2bits.com/articles/using-vim-and-xdebug- ......