不用iconv库的gb2312与utf-8的互换函数
作者:bea
一份gb2312.txt(184799字节)确实显得太大了点,而且还要经unicode转换。 这份对照表为51965字节,要小的多了。 对于无法使用iconv函数库的场合还是很实用的。 <?php //对照表的使用 $filename = "gb2utf8.txt"; $fp = fopen($filename,"r"); while(! feof($fp)) { list($gb,$utf8) = fgetcsv($fp,10); $charset[$gb] = $
一份gb2312.txt(184799字节)确实显得太大了点,而且还要经unicode转换。
这份对照表为51965字节,要小的多了。
对于无法使用iconv函数库的场合还是很实用的。
<?php
//对照表的使用
$filename = "gb2utf8.txt";
$fp = fopen($filename,"r");
while(! feof($fp)) {
list($gb,$utf8) = fgetcsv($fp,10);
$charset[$gb] = $utf8;
}
fclose($fp);
//以上读取对照表到数组备用
/** gb2312到utf-8 **/
function gb2utf8($text, &$charset) {
//提取文本中的成分,汉字为一个元素,连续的非汉字为一个元素
preg_match_all("/(?:[x80-xff].)|[x01-x7f]+/",$text,$tmp);
$tmp = $tmp[0];
//分离出汉字
$ar = array_intersect($tmp, array_keys($charset));
//替换汉字编码
foreach($ar as $k=>$v)
$tmp[$k] = $charset[$v];
//返回换码后的串
return join('',$tmp);
}
/** utf-8到gb2312 **/
function utf82gb($text, &$charset) {
$p = "/[xf0-xf7][x80-xbf]{3}|[xe0-xef][x80-xbf]{2}|[xc2-xdf][x80-xbf]|[x01-x7f]+/";
preg_match_all($p,$text,$r);
$utf8 = array_flip($charset);
foreach($r[0] as $k=>$v)
if(isset($utf8[$v]))
$r[0][$k] = $utf8[$v];
return join('',$r[0]);
}
//测试
$s = gb2utf8('这是对照表的测试', $charset);
echo utf82gb($s, $charset);
?>
有用 | 无用
这份对照表为51965字节,要小的多了。
对于无法使用iconv函数库的场合还是很实用的。
<?php
//对照表的使用
$filename = "gb2utf8.txt";
$fp = fopen($filename,"r");
while(! feof($fp)) {
list($gb,$utf8) = fgetcsv($fp,10);
$charset[$gb] = $utf8;
}
fclose($fp);
//以上读取对照表到数组备用
/** gb2312到utf-8 **/
function gb2utf8($text, &$charset) {
//提取文本中的成分,汉字为一个元素,连续的非汉字为一个元素
preg_match_all("/(?:[x80-xff].)|[x01-x7f]+/",$text,$tmp);
$tmp = $tmp[0];
//分离出汉字
$ar = array_intersect($tmp, array_keys($charset));
//替换汉字编码
foreach($ar as $k=>$v)
$tmp[$k] = $charset[$v];
//返回换码后的串
return join('',$tmp);
}
/** utf-8到gb2312 **/
function utf82gb($text, &$charset) {
$p = "/[xf0-xf7][x80-xbf]{3}|[xe0-xef][x80-xbf]{2}|[xc2-xdf][x80-xbf]|[x01-x7f]+/";
preg_match_all($p,$text,$r);
$utf8 = array_flip($charset);
foreach($r[0] as $k=>$v)
if(isset($utf8[$v]))
$r[0][$k] = $utf8[$v];
return join('',$r[0]);
}
//测试
$s = gb2utf8('这是对照表的测试', $charset);
echo utf82gb($s, $charset);
?>
有用 | 无用
猜你喜欢
您可能感兴趣的文章:
- 多文件上载系统完整版
- php中文件上传的安全问题
- ftp类(example.php)
- Oracle Faq(Oracle TAF的配置)
- Oracle Faq(如何在ORACLE中更改表的列名和顺序 )
- Oracle Faq(Oracle的字符集问题)
- PHP概述.
- PHP安装问题
- 提问的智慧
- DOMXML函数笔记
- 一个很方便的 XML 类!!原创的噢
- 提问的智慧(2)
- PHP的FTP学习(二)[转自奥索]
- 在PHP中利用XML技术构造远程服务(上)
- 在PHP中利用XML技术构造远程服务(下)
- 把从SQL中取出的数据转化成XMl格式
- JAVA/JSP学习系列之四
- JAVA/JSP学习系列之二
- 递归列出所有文件和目录