编码对照表的使用(2)

编码

<?php
/**
* 本程序用于从编码对照表装入简繁编码,利用序列化来缩短装入时间
* 同时提供两个繁简转换函数
* 使用方法:
* 在需要的程序中加入
* require_once "load_gb_big5.php";
* setchar(["big5"]);
*/

$filename = "gb_big5.txt";
if(!file_exists($filename)) {
  /**
   * 连接并打开对照表
   */
  $conn = mysql_connect();
  mysql_select_db("unicode");
  /**
   * 提取其中big5和gbk编码,表中big5只有13487个(包括符号)
   */
  $sql = "select gbk,big5,gb2312 from unicode where big5 != ''";
  $rs = mysql_query($sql);
  /**
   * 读取数据到数组,注意key和value的处理
   */
  $code = array(0=>"big5",gb2312=>0);

  while($row = mysql_fetch_array($rs)) {
    $code[pack("H4",$row][gbk])] = pack("H4",$row[big5]);
  }
  mysql_close($conn);
  $fp = fopen($filename,"w");
  fwrite($fp,serialize($code));
  fclose($fp);
}else {
  $fp = fopen($filename,"r");
  $code = unserialize(fread($fp,filesize($filename)));
  fclose($fp);
}

/**
* 将输入串转换成相应编码
*/
function getchar($s) {
  global $code;
  $v = "";
  for($i=0;$i<strlen($s);$i++) {
    if(ord($s[$i]) > 0x7f) {
      $p = sprintf("%02X%02X",$s[$i],$s[$i+1]);
      $p = $s[$i].$s[$i+1];
      $ch = $code[$p];
      if($ch == "")
        $ch = $s[$i].$s[$i+1];
      $v .= $ch;
      $i++;
    }else
      $v .= $s[$i];
  }
  return $v;
}

/**
* 设定转换类型并输出头
* 此函数前不能有其他输出
*/
function setchar($char="gb2312") {
  global $code;
  if($char != "gb2312" && $char != "big5")
    die("字符编码类型错!!!");
  if($code[0] != $char)
    $code = array_flip($code);  // 若不是指定的编码类型,则交换键
  header("Content-type: text/html; charset=$char");
}

?>
测试例:
<?php
require_once "load_gb_big5.php";
setchar("big5");

echo getchar('
最近完成了gbk、gb2312、big5的编码对照表(含其汉语拼音)的整理
现以文本文件方式提供给大家,压缩包297k
其中:(均包括符号)
gbk  21791
big5 15863
gb2312 7478
注意数据行的",",在mysql下必须要有,否则可能出错。有的朋友拿到的新版可能没有,请自行加上。
(2002-10-24)
有兴趣的朋友请与我联系,email:czjsz_ah@stats.gov.cn

文档格式:
"B6F6","","B6F6","997F","饿","e",
"B6F7","AEA6","B6F7","6069","恩","en",
"B6F8","A6D3","B6F8","800C","而","er|neng",
"B6F9","A449","B6F9","513F","儿","er|ren",
顺次为:gbk、big5、gb2312、unicode、字模、拼音

mysql建表代码(请按实际情况修改):
');
?>

时间: 2024-11-02 04:41:35

编码对照表的使用(2)的相关文章

编码对照表的使用(1)

编码 <?php/** * 当制作好编码对照表后,并不能马上使用还需对其进行一些加工 * 当然简单的查表是可以的但效率不高 * 现在以繁简转换为例,说明对照表的使用 */ /** * 连接并打开对照表 */$conn = mysql_connect();mysql_select_db("unicode");/** * 提取其中big5和gbk编码,表中big5只有13487个(包括符号) */$sql = "select gbk,big5,gb2312 from uni

JSON格式的键盘编码对照表_javascript技巧

整理了一份JSON格式的键盘编码对照表.欢迎转载,但请注明出处,谢谢! { VK_BACK: 8, //退格键 VK_TAB: 9, //TAB键 VK_RETURN: 13, //回车键 VK_SHIFT: 16, //Shift键 VK_CONTROL: 17, //Ctrl键 VK_MENU: 18, //Alt键 VK_PAUSE: 19, //Pause Break键 VK_CAPITAL: 20, //Caps Lock键 VK_SPACE: 32, //空格键 VK_PRIOR:

教你制作GBK与Unicode的对照表

前段时间,在所参与的项目中遇到了一个unicode与gb之间转码失败的问题,一些不常用汉字的编码都被转成了"??",这些汉字没有显示出来,于是自己对相关的问题做了一些研究并最终使问题得以解决.现在就结合前面两篇的unicode与GB方面的基本原理,介绍这种制作GBK-Unicode编码对照表的方法. Java的字符串String类功能强大,不但能进行一些基本的字符串操作,还可以根据需要构造指定字符集的字符串,本文所介绍的方法正是利了这一点,这种方法的基本思路是: 1.遍历GBK编码表中

asp.net2统一搜索引擎关键字编码

View二期开发正式启动,一开始就碰到了麻烦事,因为在统计模块中,需要得到来源搜索链接的关键字,所以一开始就用正则把关键字部分匹配出来,然后用自带的 Uri.UnescapeDataString() 将Urlcoding转换为文字. 本来一切都很顺利,结果将百度,网易搜索加到规则里面,就开始报错了.我猜想可能是和编码有关系,因为Google一向都是UTF-8,国内的网站大多偏向使用GB2312,所以出现这个问题我还不是很担心. 哪里知道,这个问题的严重性,让我差点对程序算法的研究失去信心.因为今

汉字编码对照表(gb2312/unicode/utf8)

  一.汉字编码的种类     汉字编码中现在主要用到的有三类,包括GBK,GB2312和Big5.     1.GB2312又称国标码,由国家标准总局发布,1981年5月1日实施,通行于大陆.新加坡等地也使用此编码.它是一个简化字的编码规范,当然也包括其他的符号.字母.日文假名等,共7445个图形字符,其中汉字占6763个.我们平时说6768个汉字,实际上里边有5个编码为空白,所以总共有6763个汉字.       GB2312规定"对任意一个图形字符都采用两个字节表示,每个字节均采用七位编码

简--繁体转换函数

函数|转换 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_GB2BIG]') and xtype in (N'FN', N'IF', N'TF'))drop function [dbo].[f_GB2BIG]GO --生成码表if exists (select * from dbo.sysobjects where id = object_id(N'[codetable]') and OBJECTP

用JS控制CSS基本样式

用JS控制CSS基本样式的方法 CSS code .class1 { width:10px; background-color: red; } HTML code  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <link rel="stylesheet" type="text/css" href=

《鸟哥的Linux 私房菜 基础学习篇(第三版)》——0.3 数据表示方式

0.3 数据表示方式 鸟哥的Linux 私房菜 基础学习篇(第三版) 事实上我们的计算机只认识0与1,记录的数据也是只能记录0与1而已,所以计算机常用的数据是二进制的.但是我们人类常用的数值运算是十进制,文字方面则有非常多的语言,常用的语言就有英文.中文(又分繁体与简体中文).日文等.那么计算机如何记录与显示这些数值/文字呢?就得要通过一系列的转换才可以啦!下面我们就来谈谈数值与文字的编码系统. 0.3.1 数字系统 早期的计算机使用的是利用通电与否的特性的真空管,如果通电就是1,没有通电就是0

jQuery技术内幕:深入解析jQuery架构设计与实现原理. 2.5 jQuery.clean( elems, context, fragment, scripts )

2.5 jQuery.clean( elems, context, fragment, scripts ) 2.5.1 实现原理 方法jQuery.clean( elems, context, fragment, scripts )负责把HTML代码转换成DOM元素,并提取其中的script元素.该方法先创建一个临时的div元素,并将其插入一个安全文档片段中,然后把HTML代码赋值给div元素的innerHTML属性,浏览器会自动生成DOM元素,最后解析div元素的子元素得到转换后的DOM元素.