首页 > 编程技术 > php

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

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

一、编码范围
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);
}

 代码如下 复制代码
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<title>创建、复制、移动、删除文件</title>
<style type="text/css教程">
<!--
body {
margin-left: 00px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
-->
</style></head>
<body>
<table width="350" border="1" cellpadding="0" cellspacing="0">
<tr>
<td><table width="350" height="80" border="0" cellpadding="0" cellspacing="0" background="images/326ssss.gif">
<form name="form1" method="post" action="index.php教程">
<tr>
<td width="95" height="39"> </td>
<td width="171" rowspan="2" align="left" valign="middle"> <input name="fopens" type="text" id="copy2" size="22"></td>
<td width="84" rowspan="2" valign="middle"><input name="submit4" type="submit" id="submit4" value="提交"></td>
</tr>
<tr>
<td height="41"> </td>
</tr>
</form>
</table></td>
</tr>
<tr>
<td><table width="350" height="80" border="0" cellpadding="0" cellspacing="0" background="images/326s.gif">
<form name="form1" method="post" action="index.php">
<tr>
<td width="111" height="39"> </td>
<td width="155" valign="bottom"><input name="copys" type="text" id="copys2" size="20">
</td>
<td width="84" rowspan="2" valign="middle"><input type="submit" name="submit" value="提交"></td>
</tr>
<tr>
<td height="41"> </td>
<td valign="top"><input name="copy2" type="text" id="copy22" size="20"></td>
</tr>
</form>
</table></td>
</tr>
<tr>
<td><table width="350" height="80" border="0" cellpadding="0" cellspacing="0" background="images/326ss.gif">
<form name="form1" method="post" action="index.php">
<tr>
<td width="111" height="39"> </td>
<td width="115" valign="bottom"><input name="moves" type="text" id="moves3" size="20">
</td>
<td width="84" rowspan="2"><input type="submit" name="submit2" value="提交"></td>
</tr>
<tr>
<td height="41"> </td>
<td valign="top"><input name="moves2" type="text" id="moves22" size="20"></td>
</tr>
</form>
</table></td>
</tr>
<tr>
<td><table width="350" height="80" border="0" cellpadding="0" cellspacing="0" background="images/326sss.gif">
<form name="form1" method="post" action="index.php">
<tr>
<td width="104"> </td>
<td width="236"><input name="delete" type="text" id="delete2">
<input type="submit" name="submit3" value="提交"></td>
</tr>
</form>
</table></td>
</tr>
</table>
</body>
</html>

php代码

 代码如下 复制代码

<?php session_start();
if($submit=="提交"){
$copy=$_post[copys];
$copys2=$_post[copy2];
if(copy($copy,$copys2)==true){echo "复制成功!!";}else{echo "失败!!";};
}
if($submit2=="提交"){
$moves=$_post[moves];
$moves2=$_post[moves2];
if(rename($moves,$moves2)==true){echo "移动成功!!";}else{echo "失败!!";};
}

if($submit3=="提交"){
$delete=$_post[delete];
if(unlink($delete)==true){echo "删除成功!!";}else{echo "失败!!";};
}
if($submit4=="提交"){
$fopens=$_post[fopens];
if(fopen($fopens,"w")==true){echo "创建成功!!";}else{echo "失败!!";};
}

?>

文章列出一三种删除数组中重复元素函数与实例代码,前二种是利用循环来判断删除重复的数组值,最后一种是比经典的,利用了array_flip()的特性,把值变成键名,再返回重复键名就会丢失。

function delsame(&$array)
{
$i = 0;
while(isset($array[$i]))
{
$j = $i + 1;
while(isset($array[$j]))
{
if($array[$i] == $array[$j]) //如果发现后面有重复的元素
{
delmember($array, $j); //把它删除
$j--; //重新检查补上来的元素是否是重复的
}
$j ++;
}
$i ++;
}
}

//删除数组中重复元素的函数

 代码如下 复制代码
function delmember(&$array, $id)
{
$size = count($array);
for($i = 0; $i <$size - $id - 1; $i ++)
{
$array[$id + $i] = $array[$id + $i + 1];
}
unset($array[$size - 1]);
}

//使用例子:

 代码如下 复制代码
$output = array(1, 2, 2, 'www.111cn.net', 5, 4, 4, 4, 2, 7, 5, 9, 10);
delsame($output);
while(list($key, $value) = each($output))
{
echo "$key:$value"."<br>";
}


//方法二

 代码如下 复制代码

function uniquearray($array)

{

// get unique elts as keys in assoc. array

for ($i=0,$n=count($array, 1);$i<$n;$i )

$u_array[$array[$i]] = 1;

 

// copy keys only into another array

reset($u_array, 1);

for ($i=0,$n=count($u_array, 1);$i<$n;$i ) {

$unduplicated_array[] = key($u_array, 1);

next($u_array, 1);

}

return $unduplicated_array;

}

//方法三

 代码如下 复制代码

$hills=array("first"=>"data1","second"=>"www.111cn.net","third"=>"data1");
$hills=array_flip($hills); //还原键名
$hills1=array_flip(array_flip($hills));//删除重复
print_r( $hills1  );

/*
array array_flip ( array trans )
  array_flip() 返回一个反转后的 array,例如 trans 中的键名变成了值,而 trans 中的值成了键名。
  注意 trans 中的值需要能够作为合法的键名,例如需要是 integer 或者 string。如果值的类型不对将发出一个警告,并且有问题的键/值对将不会反转。
  如果同一个值出现了多次,则最后一个键名将作为它的值,所有其它的都丢失了。
  array_flip() 如果失败返回 false。

*/

本款函数是一款利用递归来一步步删除目录下文件与当前目录所有子目录哦,不管目录为不为空都可以删除,

<?php教程
set_time_limit(0);
$filenum=0;
function deldir($dir){
 global $filenum;
 $dh=opendir($dir);
 while ($file=readdir($dh)){
  if($file!="."&&$file!=".."){
   $fullpath=$dir."/".$file;
    if(!is_dir($fullpath)){
     unlink($fullpath);
    if(($filenum %100)==0){
     echo "*";
    }
    $filenum=$filenum+1;
   }else{
    deldir($fullpath);
   }
  }
 }
 closedir($dh);
}
deldir("/www.111cn.net/");
echo "delete cache file success. total:".$filenum;
?>

 代码如下 复制代码

function img_exits($url)
{
    $ch = curl_init();
    curl_setopt($ch, curlopt_url,$url);
    curl_setopt($ch, curlopt_nobody, 1); // 不下载
    curl_setopt($ch, curlopt_failonerror, 1);
    curl_setopt($ch, curlopt_returntransfer, 1);

    if(curl_exec($ch)!==false)
        return true;
    else
        return false;
}

//方法二

 代码如下 复制代码

function img_exists($url)
{
    if(file_get_contents($url,0,null,0,1))
        return 1;
else
        return 0;
}

//

/**
@title:如何检查某个远程文件是否存在(php5)
@author:axgle
@version:1.0
*/
$url='http://www.111cn.net/';
echo url_exists($url);
 
function url_exists($url) {
 
        $head=@get_headers($url);
        if(is_array($head)) {
                return true;
        }
        return false;
 
}

?>

网页特效方法

 代码如下 复制代码

<script   language= "网页特效 ">
function   geturl(url)
{
        var   xmlhttp   =   new   activexobject( "microsoft.xmlhttp ");
        xmlhttp.open( "get ",url,false);
        xmlhttp.send();
        if   (xmlhttp.readystate==4)
            alert((xmlhttp.status==200)? "文件存在 ": "文件不存在 ");
}
</script>
请输入文件地址: <input   name= "file "   id= "file "   value= "http://www.111cn.net ">
<button   onclick= "geturl(file.value) "> 检测地址 </button>

标签:[!--infotagslink--]

您可能感兴趣的文章: