php转码函数

<?php

class Charset {
//UTF-8 转GB编码
static public function utf82gb($utfstr)
{
if(function_exists(‘iconv‘))
{
return iconv(‘utf-8‘,‘gbk//ignore‘,$utfstr);
}
global $UC2GBTABLE;
$okstr = "";
if(trim($utfstr)=="")
{
return $utfstr;
}
if(empty($UC2GBTABLE))
{
$filename = "data/gb2312-utf8.dat";
$fp = fopen($filename,"r");
while($l = fgets($fp,15))
{
$UC2GBTABLE[hexdec(substr($l, 7, 6))] = hexdec(substr($l, 0, 6));
}
fclose($fp);
}
$okstr = "";
$ulen = strlen($utfstr);
for($i=0;$i<$ulen;$i++)
{
$c = $utfstr[$i];
$cb = decbin(ord($utfstr[$i]));
if(strlen($cb)==8)
{
$csize = strpos(decbin(ord($cb)),"0");
for($j=0;$j < $csize;$j++)
{
$i++; $c .= $utfstr[$i];
}
$c = utf82u($c);
if(isset($UC2GBTABLE[$c]))
{
$c = dechex($UC2GBTABLE[$c]+0x8080);
$okstr .= chr(hexdec($c[0].$c[1])).chr(hexdec($c[2].$c[3]));
}
else
{
$okstr .= "&#".$c.";";
}
}
else
{
$okstr .= $c;
}
}
$okstr = trim($okstr);
return $okstr;
}

//GB转UTF-8编码
static public function gb2utf8($gbstr)
{
if(function_exists(‘iconv‘))
{
return iconv(‘gbk‘,‘utf-8//ignore‘,$gbstr);
}
global $CODETABLE;
if(trim($gbstr)=="")
{
return $gbstr;
}
if(empty($CODETABLE))
{
$filename = "data/gb2312-utf8.dat";
$fp = fopen($filename,"r");
while ($l = fgets($fp,15))
{
$CODETABLE[hexdec(substr($l, 0, 6))] = substr($l, 7, 6);
}
fclose($fp);
}
$ret = "";
$utf8 = "";
while ($gbstr != ‘‘)
{
if (ord(substr($gbstr, 0, 1)) > 0x80)
{
$thisW = substr($gbstr, 0, 2);
$gbstr = substr($gbstr, 2, strlen($gbstr));
$utf8 = "";
@$utf8 = u2utf8(hexdec($CODETABLE[hexdec(bin2hex($thisW)) - 0x8080]));
if($utf8!="")
{
for ($i = 0;$i < strlen($utf8);$i += 3)
$ret .= chr(substr($utf8, $i, 3));
}
}
else
{
$ret .= substr($gbstr, 0, 1);
$gbstr = substr($gbstr, 1, strlen($gbstr));
}
}
return $ret;
}

//Unicode转utf8
static public function u2utf8($c)
{
for ($i = 0;$i < count($c);$i++)
{
$str = "";
}
if ($c < 0x80)
{
$str .= $c;
}
else if ($c < 0x800)
{
$str .= (0xC0 | $c >> 6);
$str .= (0x80 | $c & 0x3F);
}
else if ($c < 0x10000)
{
$str .= (0xE0 | $c >> 12);
$str .= (0x80 | $c >> 6 & 0x3F);
$str .= (0x80 | $c & 0x3F);
}
else if ($c < 0x200000)
{
$str .= (0xF0 | $c >> 18);
$str .= (0x80 | $c >> 12 & 0x3F);
$str .= (0x80 | $c >> 6 & 0x3F);
$str .= (0x80 | $c & 0x3F);
}
return $str;
}

//utf8转Unicode
static public function utf82u($c)
{
switch(strlen($c))
{
case 1:
return ord($c);
case 2:
$n = (ord($c[0]) & 0x3f) << 6;
$n += ord($c[1]) & 0x3f;
return $n;
case 3:
$n = (ord($c[0]) & 0x1f) << 12;
$n += (ord($c[1]) & 0x3f) << 6;
$n += ord($c[2]) & 0x3f;
return $n;
case 4:
$n = (ord($c[0]) & 0x0f) << 18;
$n += (ord($c[1]) & 0x3f) << 12;
$n += (ord($c[2]) & 0x3f) << 6;
$n += ord($c[3]) & 0x3f;
return $n;
}
}

//Big5码转换成GB码
static public function big52gb($Text)
{
if(function_exists(‘iconv‘))
{
return iconv(‘big5‘,‘gbk//ignore‘,$Text);
}
global $BIG5_DATA;
if(empty($BIG5_DATA))
{
$filename = "data/big5-gb.dat";
$fp = fopen($filename, "rb");
$BIG5_DATA = fread($fp,filesize($filename));
fclose($fp);
}
$max = strlen($Text)-1;
for($i=0;$i<$max;$i++)
{
$h = ord($Text[$i]);
if($h>=0x80)
{
$l = ord($Text[$i+1]);
if($h==161 && $l==64)
{
$gbstr = " ";
}
else
{
$p = ($h-160)*510+($l-1)*2;
$gbstr = $BIG5_DATA[$p].$BIG5_DATA[$p+1];
}
$Text[$i] = $gbstr[0];
$Text[$i+1] = $gbstr[1];
$i++;
}
}
return $Text;
}

//GB码转换成Big5码
static public function gb2big5($Text)
{
if(function_exists(‘iconv‘))
{
return iconv(‘gbk‘,‘big5//ignore‘,$Text);
}
global $GB_DATA;
if(empty($GB_DATA))
{
$filename = "data/gb-big5.dat";
$fp = fopen($filename, "rb");
$gb = fread($fp,filesize($filename));
fclose($fp);
}
$max = strlen($Text)-1;
for($i=0;$i<$max;$i++)
{
$h = ord($Text[$i]);
if($h>=0x80)
{
$l = ord($Text[$i+1]);
if($h==161 && $l==64)
{
$big = " ";
}
else
{
$p = ($h-160)*510+($l-1)*2;
$big = $GB_DATA[$p].$GB_DATA[$p+1];
}
$Text[$i] = $big[0];
$Text[$i+1] = $big[1];
$i++;
}
}
return $Text;
}

//unicode url编码转gbk编码函数
static public function UnicodeUrl2Gbk($str)
{
//载入对照词典
if(!isset($GLOBALS[‘GbkUniDic‘]))
{
$fp = fopen(‘data/gbk-unicode.dat‘,‘rb‘);
while(!feof($fp))
{
$GLOBALS[‘GbkUniDic‘][bin2hex(fread($fp,2))] = fread($fp,2);
}
fclose($fp);
}

//处理字符串
$str = str_replace(‘$#$‘,‘+‘,$str);
$glen = strlen($str);
$okstr = "";
for($i=0; $i < $glen; $i++)
{
if($glen-$i > 4)
{
if($str[$i]==‘%‘ && $str[$i+1]==‘u‘)
{
$uni = strtolower(substr($str,$i+2,4));
$i = $i+5;
if(isset($GLOBALS[‘GbkUniDic‘][$uni]))
{
$okstr .= $GLOBALS[‘GbkUniDic‘][$uni];
}
else
{
$okstr .= "&#".hexdec(‘0x‘.$uni).";";
}
}
else
{
$okstr .= $str[$i];
}
}
else
{
$okstr .= $str[$i];
}
}
return $okstr;
}
}
?>

时间: 2024-10-24 17:41:42

php转码函数的相关文章

php--转码函数

最近在用dedecms二次开发会员功能:大家都知道dedecms编码是GBK格式的:所以在我们在项目中经常需要转码,在我了解中有两种转码方式:一是:iconv:二是mb_convert_encoding: 下面介绍下两种转码方式的用法: iconv: iconv("UTF-8″,"GB2312",$string);将$string由utf-8编码转化为GBK格式 第一个参数:现在字符串的编码格式: 第二个参数:想要转化的编码格式: 第三个参数:想要转化的字符串: mb_con

Oracle 拼音码函数

拼音码 select comm.fun_spellcode('数据库') from dual 结果 : SJK 函数 1 CREATE OR REPLACE FUNCTION COMM.FUN_SPELLCODE(PRM_SPELL IN VARCHAR2) 2 RETURN VARCHAR2 3 IS 4 SPELLCODE VARCHAR2(20); 5 INSPELL VARCHAR2(1000); 6 V_BITCHAR VARCHAR2(2); 7 V_BITNUM INTEGER;

关于追踪qemu 源码函数路径的一个方法

这阵子一直在研究qemu 磁盘io路径的源码,发现直接看代码是意见非常低效率的事情,qemu是一个比较庞大的家伙(源码部分大概154MB,完全由C语言来完成),整个结构也都非常地复杂,所以从代码上研究qemu最好的办法只有debug之.不断地收集更多的debug信息去获取源码所蕴含的道理. 很多人第一反应可能就是使用一些类似与Eclipse, gdb 这一类强大的debugger,我当然也不例外,在经过一个上午究竟该使用Eclipse还是gdb的思想斗争的私人情绪之后,我才恍然明白,原来我两个工

通过相应的检索码函数自动生成检索码

***通过相应的检索码脚本自动生成 相应的检索码 -------------------------------------------------------- --将GY_YLSF 表的某些字段插入到gy_fybm表中. insert into gy_fybm select fyxh,PYDM,FYMC,1 from GY_YLSF 通过相应的检索码(拼音码,五笔码)脚本在数据库中运行,生成函数,然后调用函数来生成相应的检索码.语句如下: --将检索码(拼音码)的生成(长度<8位的,还有=8

使用linux 版vscode 查看linux内核源码函数跳转比较慢的问题

在使用 deepin  +  vscode 查看linux源码时,发现比较恶心的问题,跳转到指定函数特别慢,偶尔还跳转不过去,在vscode 中安装一个插件就好了 1. vscode 安装插件名:C/C++ GNU Global 2. 在deepin中安装一个软件:sudo apt install global 3. 在deepin终端中使用 which global 查看global的安装路径  /usr/bin/global 4. 将这个路径配置到vscode 中 "gnuGlobal.gl

Sql 获取字符串拼音码与五笔码函数

ALTER function [dbo].[Get_PYM](@str VARCHAR(200)) returns VARCHAR(200) as begin declare @strlen int,@re VARCHAR(200) declare @t table(chr nchar(1) collate Chinese_PRC_CI_AS,letter nchar(1)) insert into @t(chr,letter) select '吖','A' union all select '

php和js字符串的acsii码函数

javascript中有charCodeAt(),根据字符查找ascii码. String.fromCharCode(),根据ascii码查找对应的字符. console.log('A'.charCodeAt(0));// 65 console.log('z'.charCodeAt(0));// 122 console.log('中'.charCodeAt(0));// 20013 console.log( String.fromCharCode(97));// a php的函数表示, int

php 源码函数

在PHP中,函数分为俩种, 一种是zend_internal_function, 这种函数是由扩展或者Zend/PHP内核提供的,用’C/C++’编写的,可以直接执行的函数. 另外一种是zend_user_function, 这种函数呢,就是我们经常在见的,用户在PHP脚本中定义的函数,这种函数最终会被ZE翻译成opcode array来执行 查看zend_compile.h,我们可以找到如下的3个结构: typedef struct _zend_internal_function { /* C

JS-编码函数:escape(),encodeURI(),encodeURIComponent()

1.escape() escape()是js编码函数中最古老的一个.虽然这个函数现在已经不提倡使用了,但是由于历史原因,很多地方还在使用它,所以有必要先从它讲起. 实际上,escape()不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值.比如"春节"的返回结果是%u6625%u8282,也就是说在Unicode字符集中,"春"是第6625个(十六进制)字符,"节"是第8282个(十六进制)字符. escape("