首页 > 编程技术 > php

php字符串编码相互转换函数(GBK/UTF-8)

发布时间:2016-11-25 15:38

虽然说php自带了编码转换函数,但是在使用时会碰到字符丢失问题了,为了解决这个问题小编整理了两上将非GBK字符集的编码转为GBK与将非UTF-8字符集的编码转为UTF-8的函数,希望能帮助到各位

例子。

 代码如下 复制代码

<?php

/**
 * 将非GBK字符集的编码转为GBK
 *
 * @param mixed $mixed 源数据
 *
 * @return mixed GBK格式数据
 */
function charsetToGBK($mixed)
{
    if (is_array($mixed)) {
        foreach ($mixed as $k => $v) {
            if (is_array($v)) {
                $mixed[$k] = charsetToGBK($v);
            } else {
                $encode = mb_detect_encoding()($v, array('ASCII', 'UTF-8', 'GB2312', 'GBK', 'BIG5'));
                if ($encode == 'UTF-8') {
                    $mixed[$k] = iconv('UTF-8', 'GBK', $v);
                }
            }
        }
    } else {
        $encode = mb_detect_encoding($mixed, array('ASCII', 'UTF-8', 'GB2312', 'GBK', 'BIG5'));
        //var_dump($encode);
        if ($encode == 'UTF-8') {
            $mixed = iconv('UTF-8', 'GBK', $mixed);
        }
    }
    return $mixed;
}


/**
 * 将非UTF-8字符集的编码转为UTF-8
 *
 * @param mixed $mixed 源数据
 *
 * @return mixed utf-8格式数据
 */
function charsetToUTF8($mixed)
{
    if (is_array($mixed)) {
        foreach ($mixed as $k => $v) {
            if (is_array($v)) {
                $mixed[$k] = charsetToUTF8($v);
            } else {
                $encode = mb_detect_encoding($v, array('ASCII', 'UTF-8', 'GB2312', 'GBK', 'BIG5'));
                if ($encode == 'EUC-CN') {
                    $mixed[$k] = iconv('GBK', 'UTF-8', $v);
                }
            }
        }
    } else {
        $encode = mb_detect_encoding($mixed, array('ASCII', 'UTF-8', 'GB2312', 'GBK', 'BIG5'));
        if ($encode == 'EUC-CN') {
            $mixed = iconv('GBK', 'UTF-8', $mixed);
        }
    }
    return $mixed;
}

?>

一句话删除目录下所有文件是用到了三个函数,分别为 glob unlink array_map了,下面我们一起来看看。

例子

 代码如下 复制代码

array_map('unlink',glob('*'));

就这一句可以删除所以目录下的文件了,我们也可以指定目录,如

 代码如下 复制代码

array_map('unlink',glob('aaa/*'));

就是aa目录下所有文件了,下面讲一下这三个函数

glob() 函数返回匹配指定模式的文件名或目录
unlink()函数删除文件
array_map() 函数返回用户自定义函数作用后的数组。回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致

下面这个正则验证用户名的方法原则是这样的用户名必须是由字母带数字带定划线组成了,下面一起来看看例子吧。

1.检查用户名是否符合规定 两位以上的字母,数字,或者下划线
 

 代码如下 复制代码

/**
 * 检查用户名是否符合规定
 *
 * @param STRING $username 要检查的用户名
 * @return TRUE or FALSE
 */
function is_username($username)
{
$strlen = strlen($username);
if (!preg_match("/^[a-zA-Z0-9_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]+$/",
$username))
{
return false;
} elseif (20 < $strlen || $strlen < 2)
{
return false;
}
return true;
}

两位以上的字母,数字,或者下划线^[a-zA-Z0-9_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]+$
 

注: 在这里,字母是 a-z,A-Z,以及从 127 到 255(0x7f-0xff)的 ASCII 字符


2、密码:6—20位,由字母、数字组成

 代码如下 复制代码

function isPWD($value,$minLen=5,$maxLen=16){
$match='/^[\\~!@#$%^&*()-_=+|{}\[\],.?\/:;\'\"\d\w]{'.$minLen.','.$maxLen.'}$/';
$v = trim($value);
if(empty($v))
return false;
return preg_match($match,$v);
}

3、email验证

 代码如下 复制代码

function isEmail($value,$match='/^[\w\d]+[\w\d-.]*@[\w\d-.]+\.[\w\d]{2,10}$/i'){
$v = trim($value);
if(empty($v))
return false;
return preg_match($match,$v);
}

注意,把内容中的\替换成小写的\就可以正常使用了,因为本服务器自动过滤\所以本文替换成全角了。

分隔字符串函数在php中我们会用到explode与preg_split函数,但是小编用到最多的就是直接以一个字符分开了,如果有多个字符串我们好像就不知道如何使用此函数来分隔字符串了,下文来给各位介绍一下explode用法。

explode最简单用法

在本例中,我们将把字符串分割为数组:

 代码如下 复制代码

<?php
$str = "Hello world. It's a beautiful day.";
print_r (explode(" ",$str));
?>
输出:
Array
(
[0] => Hello
[1] => world.
[2] => It's
[3] => a
[4] => beautiful
[5] => day.
)

但如果碰到下面函数我们要如何来解决"祛痘、痘印#抗氧化:活肤滋润#对抗唇纹:提拉紧致#控油:保湿#改善唇色";

例子

 代码如下 复制代码

$string="祛痘、痘印#抗氧化:活肤滋润#对抗唇纹:提拉紧致#控油:保湿#改善唇色";   

$arr=explode('#',str_replace(array(":"),'#',$string));

或者使用preg_split方法达到相同的效果

$arr = preg_split( "/ (#|:) /", $string );

发现这样非常的好用了哦,多个不同规则我们都可以一条语句搞写哦。

在由变量传过来的一个完整的url地址,我们需要取得地址中的域名,这里可以使用parse_url函数来处理,当然有用户使用正则来解决都是可以,下面看两个例子。

方法1php自带函数(parse_url)

 代码如下 复制代码

$Url=’http://www.111cn.net/ index.html’;
$tempu=parse_url($Url);
$message=$tempu['host'];
echo $message;
//输出结果就是 www.111cn.net

方法2自定义函数

 代码如下 复制代码

function get_domain($url)
{
$pattern = "/[/w-]+/.(com|net|org|gov|biz|com.tw|com.hk|com.ru|net.tw|net.hk|net.ru|info|cn|com.cn|net.cn|org.cn|gov.cn|mobi|name|sh|ac|la|travel|tm|us|cc|tv|jobs|asia|hn|lc|hk|bz|com.hk|ws|tel|io|tw|ac.cn|bj.cn|sh.cn|tj.cn|cq.cn|he.cn|sx.cn|nm.cn|ln.cn|jl.cn|hl.cn|js.cn|zj.cn|ah.cn|fj.cn|jx.cn|sd.cn|ha.cn|hb.cn|hn.cn|gd.cn|gx.cn|hi.cn|sc.cn|gz.cn|yn.cn|xz.cn|sn.cn|gs.cn|qh.cn|nx.cn|xj.cn|tw.cn|hk.cn|mo.cn|org.hk|is|edu|mil|au|jp|int|kr|de|vc|ag|in|me|edu.cn|co.kr|gd|vg|co.uk|be|sg|it|ro|com.mo)(/.(cn|hk))*/";
preg_match($pattern, $url, $matches);
if(count($matches) > 0)
{
return $matches[0];
}else{
$rs = parse_url($url);
$main_url = $rs["host"];
if(!strcmp(long2ip(sprintf("%u",ip2long($main_url))),$main_url))
{
return $main_url;
}else{
$arr = explode(".",$main_url);
$count=count($arr);
$endArr = array("com","net","org");//com.cn net.cn 等情况
if (in_array($arr[$count-2],$endArr))
{
$domain = $arr[$count-3].".".$arr[$count-2].".".$arr[$count-1];
}else{
$domain = $arr[$count-2].".".$arr[$count-1];
}
return $domain;
}
}
}

标签:[!--infotagslink--]

您可能感兴趣的文章: