10

PHP 截取字符串

分类: PHP编程 暂无评论

相信很多人都用PHP自带的substr();在截取中文字符串的时候遇到麻烦。
在这里贴一个把中文当作一个长度截取的函数

function cutstr($str, $len, $dot='...')
{
     $i = $ti = 0;
     if (strlen($str) < $len) return $str;
     $charset = is_utf8($str);
     if ($charset) {
         while ($ti < $len) {
         $t = ord($str[$i]);
         if ($t >= 224) {
             $i += 3;
         } elseif ($t >= 192) {
             $i += 2;
         } else {
             $i++;
         }
         if ($i>$len+1) break;
             $ti++;
         }
    } else {
        for($ti = 0; $ti < $len; $ti++) {
            $t = ord($str[$i]);
            if ($t > 127) {
                $i += 2;
            } else {
	   $i++;
            }
        }
    }
    $rt = substr($str, 0, $i);
    return $rt;
}
//识别字符串编码
function is_utf8($string) {
    return preg_match('%^(?:
        [\x09\x0A\x0D\x20-\x7E]            # ASCII
        | [\xC2-\xDF][\x80-\xBF]            # non-overlong 2-byte
        |  \xE0[\xA0-\xBF][\x80-\xBF]        # excluding overlongs
        | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  # straight 3-byte
        |  \xED[\x80-\x9F][\x80-\xBF]        # excluding surrogates
        |  \xF0[\x90-\xBF][\x80-\xBF]{2}    # planes 1-3
        | [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15
        |  \xF4[\x80-\x8F][\x80-\xBF]{2}    # plane 16
   )*$%xs', $string);
}

17

数据库设计原则-范式(2)

分类: 数据库 暂无评论

第二范式(2NF)

1.在讲第二范式前,首先必须要保证符合第一范式的要求。

2.在前面文章中说到,每行都表示一个实体,不能重复,第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。比如我们前面给的电话本的例子,每个用户都有一个ID,这个ID是唯一的,因此每个用户可以被惟一区分。这个惟一属性列被称为主关键字或主键、主码。

3.属性完全依赖于主键。

例子:这个表设计符合第一范式,但是不符合第二范式。

OrderId Company ContactPerson Money
1 东明企业 andery 2347.00
2 德商网络 jack 5893.00
3 东明企业 andery 1506.00
4 东明企业 andery 6503.00

上表中订单号(OrderId)是主键,这里公司名字(Company)和订单金额(Money)都依赖于订单号。但是联络人(ContactPerson)则是依赖于公司名称的。

这样会出现的问题:

1.数据冗余,加入一个公司下了100个订单,联络人就会重复出现100次。

2.更新异常,若某公司的联络人有调整,相应的ContactPerson值都要更新,这么多重复的数据都需要更新,产生不需要的消耗。
这里就不符合第二范式,我们就需要分成2个表。

OrderId Company Money
1 东明企业 2347.00
2 德商网络 5893.00
3 东明企业 1506.00
4 东明企业 6503.00

Company ContactPerson
东明企业 andery
德商网络 jack

这样符合第二范式了,某公司联络人变更只需要更新第二张表中相应公司的联络人信息就可以了。

17

数据库设计原则-范式(1)

分类: 数据库 暂无评论

下面是八个范式的英文全称:

1NF : First normal form
2NF : Second normal form
3NF : Third normal form
BCNF : Boyce-Codd normal form
4NF : Fourth normal form
5NF : Fifth normal form
DKNF : Domain/key normal form
6NF : Sixth normal form

第一范式(1NF)

在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。
所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。
Read the rest of this entry »

,

14

PHP设计模式之观察者模式

分类: PHP编程 暂无评论

先抛出一个问题,你的网站有一个新用户注册,假设你需要给用户发送一条站内信,一封电子邮件,给用户分配一个宠物。

那么假定程序需要4个类,分别是用户类(User),电子邮件类(Email),站内信息类(Message),宠物类(Pet)。

那么要解决上面的问题,我们可以直接在 用户对象中用户注册成功后面计入其他3个对象相应的处理方法。这样目的达到了,是否合理呢?

试想,现在用户类需要改动,有可能就会导致注册成功后的动作不能正常启动,或者我改动了其他3个类,我就必须回到User类中寻找到相应的代码进行修改。这样会造成很多不必要的麻烦,如果是团队协作,那就真是头疼了。

在OOP编程中,我们一直在说一个东西就是避免组件之间紧密耦合。上面给出的解决办法就违反了这一原则。观察者模式提供了避免组件之间紧密耦合的一种方法。
Read the rest of this entry »

10

PHP设计模式之工厂模式

分类: PHP编程 暂无评论

在讲之前先做一个比喻,现在我需要生产一批货。

我首先需要2000件上衣,那么我发单上写的是:

代工工厂名称:XX上衣厂
货物需求数量:2000件
货物种类:上衣
联系人:李先生
电话:123

Read the rest of this entry »

09

memcache与memcached的区别

分类: PHP编程 暂无评论

memcache应该大家都很熟悉了。
但是经常会看到memcache和memcached,他们到底有什么区别呢?
我们经常也会看到http,httpd,imap,imapd。
通常在linux中的应用,服务端被称为“守护”,守护进程一般的命名就是与客户端应用名称加上字母”D”。例如“imap”是一个客户端连接到“imapd”守护进程。
memcache作为php的扩展安装好之后,就可以访问memcached服务器。 Read the rest of this entry »

07

vsftpd 安装与配置

分类: linux 2 Comments

第一步:安装

打开ftp://vsftpd.beasts.org/users/cevans/ 选择一个你需要的版本,我在这里选择了vsftpd-2.2.2.tar.gz

vsftpd下载

wget ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.2.2.tar.gz

然后解压这个文件包:tar zxvf vsftpd-2.2.2.tar.gz

然后输入命令

cd vsftpd-2.2.2

make

我在这里遇到一个错误 Read the rest of this entry »

05

PHP设计模式之单例模式

分类: PHP编程 暂无评论

有时候我们需要一个对象只做一个特定的事情,并且程序中只需要这一个对象,那么要保证这个对象只被实例化一次,很多情况下很多人的做事是用引用。这样整个程序在运行过程中只使用这一个对象。

在OOP中,这种做法可能不被允许,复杂的项目或者多人开发的应用中这样做可能会有很多头疼的问题,因为有可能在其他地方错误的将这个对象再次实例化,所以我们需要在这个对象本身就控制这个问题,这里就要将到一种常用的设计模式:单例模式。
Read the rest of this entry »

02

URL缩短服务的实现(Bit.ly,j.mp,tinyURL,Go.ly…)

分类: PHP编程 暂无评论

我所知道的URL缩短服务是从Twitter使用tinyurl.com来缩短微薄中的域名开始流行起来的,国内的新浪,腾讯微薄都使用了。

Twitter最开始使用tinyurl.com,现在在用的是Bit.ly。

为什么需要URL缩短业服务?

URL缩短服务简单的说就是把一个很长的url地址做成一个很短的url来跳转。这样的好处就是可以把原本一长串的URL地址变成很少的字符。
Read the rest of this entry »

02

47个令人瞠目结舌的 CSS3动画

分类: CSS 暂无评论

或许你已经看过很多关于CSS3动画的技术,包括前端观察之前发表的一些,那么现在就情看一看CSS3动画的魅力吧。这里是一辑47个令人瞠目结舌的 CSS3动画演示。他们演示了CSS3能给我们带来的巨大的可能性。

1.使用jQuery的CSS3时钟


Read the rest of this entry »

TOP
 1 2 下一页

Videos, Slideshows and Podcasts by Cincopa Wordpress Plugin