小妖女 发表于 2015-2-4 00:13:29

PHP网页编程之PHP中GBK和UTF8编码处置

另外要叮嘱各位的是,抵御诱惑,ASP/PHP/JSP/.NET的对比也许会让你无所适从,你也许学了一半PHP,又开始打C#的主意,或者有人说JAVA很强,这个时候的你绝对不能动摇,哪怕你真想学。编码   1、编码局限
1. GBK (GB2312/GB18030)
\x00-\xffGBK双字节编码局限
\x20-\x7fASCII
\xa1-\xff中文
\x80-\xff中文
2. UTF-8 (Unicode)
\u4e00-\u9fa5 (中文)
\x3130-\x318F (韩文
\xAC00-\xD7A3 (韩文)
\u0800-\u4e00 (日文)
ps: 韩文是大于[\u9fa5]的字符

正则例子:
preg_replace("/([\x80-\xff])/","",$str);
preg_replace("/()/","",$str);
2、代码例子

//判别内容里有无中文-GBK (PHP)
function check_is_chinese($s){
    return preg_match('/[\x80-\xff]./', $s);
}
//获得字符串长度-GBK (PHP)
function gb_strlen($str){
    $count = 0;
    for($i=0; $i<strlen($str); $i++){
      $s = substr($str, $i, 1);
      if (preg_match("/[\x80-\xff]/", $s)) ++$i;
      ++$count;
    }
    return $count;
}
//截取字符串字串-GBK (PHP)
function gb_substr($str, $len){
    $count = 0;
    for($i=0; $i<strlen($str); $i++){
      if($count == $len) break;
      if(preg_match("/[\x80-\xff]/", substr($str, $i, 1))) ++$i;
      ++$count;      
    }
    return substr($str, 0, $i);
}
//统计字符串长度-UTF8 (PHP)
function utf8_strlen($str) {
    $count = 0;
    for($i = 0; $i < strlen($str); $i++){
      $value = ord($str[$i]);
      if($value > 127) {
            $count++;
            if($value >= 192 && $value <= 223) $i++;
            elseif($value >= 224 && $value <= 239) $i = $i + 2;
            elseif($value >= 240 && $value <= 247) $i = $i + 3;
            else die('Not a UTF-8 compatible string');
      }
      $count++;
    }
    return $count;
}

//截取字符串-UTF8(PHP)
function utf8_substr($str,$position,$length){
    $start_position = strlen($str);
    $start_byte = 0;
    $end_position = strlen($str);
    $count = 0;
    for($i = 0; $i < strlen($str); $i++){
      if($count >= $position && $start_position > $i){
            $start_position = $i;
            $start_byte = $count;
      }
      if(($count-$start_byte)>=$length) {
            $end_position = $i;
            break;
      }   
      $value = ord($str[$i]);
      if($value > 127){
            $count++;
            if($value >= 192 && $value <= 223) $i++;
            elseif($value >= 224 && $value <= 239) $i = $i + 2;
            elseif($value >= 240 && $value <= 247) $i = $i + 3;
            else die('Not a UTF-8 compatible string');
      }
      $count++;
    }
    return(substr($str,$start_position,$end_position-$start_position));
}

//字符串长度统计-UTF8 [中文3个字节,俄文、韩文占2个字节,字母占1个字节] (Ruby)
def utf8_string_length(str)
    temp = CGI::unescape(str)
    i = 0;
    j = 0;
    temp.length.times{|t|
      if temp < 127
            i += 1
      elseif temp >= 127 and temp < 224
            j += 1
            if 0 == (j % 2)
                i += 2
                j = 0
            end
      else
            j += 1
            if 0 == (j % 3)
                i +=2
                j = 0
            end
      end
    }
    return i
}
//判别是不是是有韩文-UTF-8 (JavaScript)
function checkKoreaChar(str) {
    for(i=0; i<str.length; i++) {
      if(((str.charCodeAt(i) > 0x3130 && str.charCodeAt(i) < 0x318F) || (str.charCodeAt(i) >= 0xAC00 && str.charCodeAt(i) <= 0xD7A3))) {
            return true;
      }
    }
    return false;
}
//判别是不是有中文字符-GBK (JavaScript)
function check_chinese_char(s){
    return (s.length != s.replace(/[^\x00-\xff]/g,"**").length);
}


3、参考文档
http://www.unicode.org/
http://examples.oreilly.com/cjkvinfo/doc/cjk.inf
http://www.ansell-uebersetzungen.com/gbuni.html
http://www.haiyan.com/steelk/navigator/ref/gbk/gbindex.htm
http://baike.百度.com/view/40801.htm
http://www.chedong.com/tech/hello_unicode.html



培训的第二阶段,开始了PHP语言语法结构和应用的学习。

透明 发表于 2015-2-4 08:54:10

开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。

冷月葬花魂 发表于 2015-2-9 20:55:05

建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。

海妖 发表于 2015-2-18 00:45:39

Ps:以上纯属原创,如有雷同,纯属巧合

飘灵儿 发表于 2015-2-25 19:03:13

不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。

不帅 发表于 2015-3-8 01:06:50

因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax

小女巫 发表于 2015-3-8 12:43:45

首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。

爱飞 发表于 2015-3-10 22:44:19

曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线\\\\\\\'_\\\\\\\' ;

第二个灵魂 发表于 2015-3-15 16:02:23

在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。

莫相离 发表于 2015-3-22 01:55:02

建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。

小魔女 发表于 2015-4-9 09:43:48

遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。

小妖女 发表于 2015-4-20 22:46:52

做为1门年轻的语言,php一直很努力。

变相怪杰 发表于 2015-5-4 19:54:45

学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql

仓酷云 发表于 2015-6-8 20:07:54

再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。

再现理想 发表于 2015-6-12 03:35:26

首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。

兰色精灵 发表于 2015-6-27 09:26:56

多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。

admin 发表于 2015-7-4 01:10:47

兴趣是最好的老师,百度是最好的词典。

只想知道 发表于 2015-7-7 08:20:38

php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)

因胸联盟 发表于 2015-7-11 12:50:29

曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线\\\\\\\'_\\\\\\\' ;

老尸 发表于 2015-7-19 14:11:18

基础有没有对学习php没有太大区别,关键是兴趣。
页: [1]
查看完整版本: PHP网页编程之PHP中GBK和UTF8编码处置