PHP中GBK和UTF8编码处理(中文,韩文)

一、编码范围
1. gbk (gb2312/gb18030)
x00-xff gbk双字节编码范围
x20-x7f ascii
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("/([u4e00-u9fa5])/","",$str);

二、代码例子

//判断内容里有没有中文-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[t] < 127
            i += 1
        elseif temp[t] >= 127 and temp[t] < 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 (网页特效)
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);
}

时间: 2024-09-20 09:41:59

PHP中GBK和UTF8编码处理(中文,韩文)的相关文章

PHP中GBK和UTF8编码处理

编码 一.编码范围 1. GBK (GB2312/GB18030)\x00-\xff  GBK双字节编码范围\x20-\x7f  ASCII\xa1-\xff  中文\x80-\xff  中文 2. UTF-8 (Unicode)\u4e00-\u9fa5 (中文)\x3130-\x318F (韩文\xAC00-\xD7A3 (韩文)\u0800-\u4e00 (日文)ps: 韩文是大于[\u9fa5]的字符 正则例子:preg_replace("/([\x80-\xff])/",&q

PHP与MYSQL中UTF8编码的中文排序实例_php技巧

本文实例讲述了PHP与MYSQL中UTF8编码的中文排序方法,分享给大家供大家参考.具体实现方法如下: 一般来说,中文共有三种排序方式: 1.根据拼音排序: 2.根据笔画排序: 3.根据偏旁排序. 系统的默认排序方式为拼音排序了,这个也是我们常用的,下面介绍的就是按拼音排序了 1. 需要在php数组中用中文排序,但是一般使用utf8格式的文件,直接用asort排序不行.用gbk和gb2312可以.这跟几种格式的编码有关系.gbk和gb2312本身的编码就是用拼音排序的. 复制代码 代码如下: f

ios-OC中怎样将UTF8编码转换成中文

问题描述 OC中怎样将UTF8编码转换成中文 如题:有一个Person类,里面重写了description方法,实现返回姓名,年龄等信息.这样我可以直接通过NSLog(@""%@""per); 来输出对象信息.但是如果我把对象存入数组中,然后输出数组:NSLog(@""%@"" array);这样输出的结果都是UTF8编码.如果对象per内部的信息是因为和数字的话结果不受影响,如果是中文的话输出的就是UTF8.这是为什么呢?如

gbk和utf8编码自动识别方法[php版]

目前中文网页主流的编码为gbk和utf8两种编码.因此,我们做编码识别的前提是,编码不是gbk就是utf8. 编码自动识别的基本思想如下: 1.看给定的字节串是否符合utf8编码规则.如果不符合则为gbk编码.具体utf8编码规则件日志<utf8编码规则>. 2.如果给定的字节串中没有符合utf8三字节规则的,则为gbk编码.中文在utf8中占三个字节. 3.如果给定的字节串能对应上gbk编码中的中文,且无法对应上utf8编码中的中文,则为gbk编码. 4.特殊情况,特殊处理.如 "

Shell脚本把文件从GBK转为UTF-8编码_linux shell

shell 脚本: #!/bin/sh ## ## convert file from GB2312 to UTF-8 ## path="$1" unset opt if [ "$2" = "force" ]; then opt="-c -s" fi if [ -z "$path" ]; then echo "nUsage: $0 <file or dir>n" elif [

charset中gbk或utf8对seo的影响

看到有人问gbk和utf-8对于seo的影响,我说点个人看法. 如果网站是面向国人的,建议使用gbk,理由如下: 1.gbk采用双字节表示汉字,utf-8采用三个字节表示汉字,从表示一个汉字所占的字节数来说,gbk相对于utf-8可以节约50%的空间. 2.目前开源的程序gbk编码相对成熟一些. 3.蜘蛛在爬行某个页面的过程中识别的charset属性值如果为gbk的话基本上可以确实为中文类型的网站(无需对后面的内容进行判断),如果为utf-8的话还需要进一步判断(例如检索全文中的字符有多少属于u

CMD魔法堂:支持显示UTF8编码的中文

一.前言   在Unbuntu中用sqlite3-command-line操作sqlite3还好好的,到了windows下查询表内容时发现中文全部乱码了!马上 想到sqlite3内部使用utf-8对字符进行编码,而windows的默认编码时gbk,cmd命令环境自然也是gbk了,乱码是正常不过的事.解决 办法自然就是修改cmd命令环境的编码方式.   二.动手吧          1. 进入cmd命令环境 // 改用utf-8编码 chcp 65001 2. 修改字体 在命令行标题栏上点击右键,

Web 开发中遇到的UTF-8编码的问题总结第1/2页_相关技巧

主要有五个方面: 一..HTML页面转UTF-8编码问题 二.PHP页面转UTF-8编码问题 三.MYSQL数据库使用UTF-8编码的问题 四.JS相关的UTF-8编码问题 五.FLASH相关的UTF-8编码问题 一.HTML页面转UTF-8编码问题 1.在<head>后,<title>前加入一行: <meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> 顺序不能错,一定要在<ti

php正则判断中文韩文的编码的例子

中文编码 双字节字符编码范围: 1. GBK (GB2312/GB18030) \x00-\xff           →GBK双字节编码范围 \x20-\x7f         →ASCII    取出非汉字的字符 \xa1-\xff 中文 →gb2312 取出所有中文(不包括字母数字和字符) \x80-\xff 中文 →gbk 取出所有中文(不包括字母数字和字符)      2. UTF-8 (Unicode) \一-\?    →(中文) 取出所有中文 \x3130-\x318F    →