社区
基础编程
帖子详情
100分:找GB<=>BIG5转换的类
delfans
2002-09-19 05:45:30
当然是PHP的啦,谢谢。
...全文
229
8
打赏
收藏
100分:找GB<=>BIG5转换的类
当然是PHP的啦,谢谢。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
binscut
2002-09-20
打赏
举报
回复
好象我理解错误了,iconv应该不能实现内码的对应转换
anycon
2002-09-19
打赏
举报
回复
同意nne998(上上下下左右左右BABA)兄;
yu_dx()兄:
iconv()能將整個網頁簡繁互換嗎??
yu_dx
2002-09-19
打赏
举报
回复
同意楼上: binscut(何时走出迷雾)
只要编译时加上支持iconv
何必如此麻烦
$str1 = "中文";
$str2=iconv("gb2312","utf-8",$str1);
nne998
2002-09-19
打赏
举报
回复
PHP输出控制功能在简繁体转换中的应用
概要:本文对PHP的输出控制功能进行了简单介绍并对其在简繁体转化中的应用给出了具体思路和实例
一 PHP 输出控制功能介绍
PHP作为当今流行的脚本语言之一,具有编写简便,执行速度快,扩充性好等优点。PHP的输出信息控制函数可以让你控制你的脚本输出的内容,可以用于许多不同的情况,特别是在你的脚本已经输出信息后需要发送文件头的情况以及需要对输出信息进行编辑处理的地方。输出控制函数不对使用 header() 或 setcookie() 发送的文件头信息产生影响,只对那些类似于 echo()、print() 和 PHP 代码的数据块有作用。
例 1. 控制输出
test.php
<?
function test($str){
return str_replace( "php2000 ", "y10k ",$str);
}
ob_start( "test ");
echo "hello php2000 ";
ob_end_flush();
? >
这个程序在没有输出信息控制的情况下应该输出为
hello php2000
但通过指定了输出控制函数后,输出变为
hello y10k
在上面的例子中,使用 echo() 的输出内容将会保存在输出缓冲区中,直到调用了 ob_end_flush()或者脚本运行终止, 然后输出信息由自定义的处理函数进行处理(替换里面的字符串)并返回结果。
相关函数说明
ob_start([string output_callback])- 打开输出缓冲区
所有的输出信息不在直接发送到浏览器,而是保存在输出缓冲区里面,可选得回调函数用于处理输出结果信息。
ob_end_flush - 结束(发送)输出缓冲区的内容,关闭输出缓冲区
二 简繁体转换的实现
一般通过对照表的形式实现,相关的文章非常多,这里就不多讲了,只给出其实现代码
<?
function gb2big5($str) {
global $_gb_big5_;
$leng = strlen($str)-1;
for($i = 0; $i <$leng; $i++){
$h = ord($str[$i]);
if($h >=160){
$l = ord($str[$i+1]);
$gb=($h==161 && $l==64)? " " : substr($_gb_big5_, ($h-160)*510+($l-1)*2, 2);
$str[$i] = $gb[0];
$str[$i+1] = $gb[1];
$i++;
}
}
return $str;
}
? >
其中:
$gb_big5_ 保存着big5 的字库对照表
$str 为要转化的字符串
三 输出控制函数在简繁体转化中的应用
目前的大多数网站的简繁体页面转换都是通过各自单独的页面实现的,这样导致在修改简体页面的时候还需要再次修改繁体的页面,不能做到自动同步。而我们提供的这个方法,可以实现同一个页面自动的变换简繁体显示。其实现方法是:
1 建立简繁体标志,用于指示当前显示的简繁体状态,同时对简繁体状态进行切换
php2000_gb_big5.php
<?
session_start(); // 打开session 功能,用于在各个页面之间自动传递标志
if(!session_is_registered( "php2000_big5 ")){ // 检查简繁体标志的注册状态
session_register( "php2000_big5 "); // 注册简繁体标志,简体=0;繁体=1
$php2000_big5=0; // 默认为简体
}
$php2000_big5 = ($php2000_big5+1)%2; // 切换简繁体状态
header( "location: ".getenv( "HTTP_REFERER ")); // 返回其调用页面
? >
2对页面输出信息进行控制,每个页面都调用这段程序,用于简繁体转换
require.php(应包括前面第二部分的转换代码,这里略)
<?
Session_start();
function translate_gb2big5($str) {
$str = gb2big5($str); // 转化为 big5
$str = str_replace('charset=gb2312', 'charset=big5', $str); // 替换字符类型
header('Content-Type: text/html; charset=big5'); // 繁体文件头
return $str;
}
if(session_is_registered( "php2000_big5 ") && ($php2000_big5==1)){ // 判断标志
$fp = fopen('big5.table', 'r'); // big5的字库表
$_gb_big5_ = fread($fp, filesize('big5.table')); // 读出数据
fclose($fp);
ob_start('translate_gb2big5'); // 启动输出信息控制
}
? >
3 使用方法,这里给出一个最简单的例子,放在和 require.php 同一个目录里面
test.php
<?
require( "require.php ");
echo "大家好,这里是 PHP 世纪网 ";
? >
<a href=php2000_gb_big5.php >
<?
if($php2000_big5==1)echo "GB ";
else echo "Big5 ";
? >
</a >
第一次运行结果为默认简体如下
大家好,这里是 PHP 世纪网 Big5
点击 Big5 连接显示繁体如下
大家好,這里是 PHP 世紀網 GB
点击 GB 将返回简体页面
由于使用了session 保存了简繁体标志,这样其他任何使用了 require.php 的页面都会自动按照当前的标志显示相应的页面。更多的实例请看我的网站 http://www.php2000.com。
4 big5 字库的保存的改进方法
曾经考虑使用 session 来保存 big5 字库,但使用后发现速度明显减慢,主要因为 session 也是通过文件形式实现,所以不会对性能产生提高,而且因为session 不会根据简繁体标志自动判断装载与否,所以造成在简体下也装载了 big5 的字库,所以造成速度减慢。
由于我用的服务器为 linux 所以考虑使用共享内存(Windows 不支持共享内存)来保存 big5 字库信息。其更改的代码为require.php 的判断部分:
<?
if(session_is_registered( "php2000_big5 ") && ($php2000_big5==1))
{
// 修改成使用共享内存
// 判断是否已经创建,打开50000字节的 0xff3 段的共享内存
$shm_id = @shmop_open(0xff3, "a ", 0644, 50000);
if($shm_id) {
$_gb_big5_ = shmop_read($shm_id, 0,shmop_size($shm_id)); // 读出big5 数据
}
else{
// 创建 50000 字节的系统标识为 0xff3 的共享内存块
$shm_id = @shmop_open(0xff3, "c ", 0644, 50000);
// 读出数据
$fp = fopen('big5.table', 'r');
$_gb_big5_ = fread($fp, filesize('big5.table'));
fclose($fp);
if($shm_id){
$shm_bytes_written = shmop_write($shm_id, $_gb_big5_,0); // 写入 big5 数据
}
}
ob_start('translate_gb2big5');
}
? >
关于共享内存的使用方法,请参看有关资料。
四 结论
PHP 作为一种公开源代码的脚本语言,其扩充性是非常好的。本文只是对其一个功能的一种应用方式的探讨,并实现了比较完美的同一页面自动简繁体转换功能。希望广大爱好 PHP 的朋友能从中得到启发,做出更好的作品。
---------------------------------------------------------------
binscut
2002-09-19
打赏
举报
回复
iconv()函数!看看帮助吧,可能需要在编译PHP时要加参数
anycon
2002-09-19
打赏
举报
回复
類沒有,含數倒有.
phpteam
2002-09-19
打赏
举报
回复
http://www.csdn.net/Expert/FAQ/FAQ_Index.asp?id=3382
http://www.csdn.net/Expert/FAQ/FAQ_Index.asp?id=4423
phpteam
2002-09-19
打赏
举报
回复
搜索一下以前的帖子,前面讨论过的!
PHP编码
转换
函数utf-
gb
-
big5
支持在PHP中将编码
转换
为指定的编码方式<br>
gb
2
big5
<br>
big5
2
gb
<br>utf82u<br>u2utf8<br>
gb
2utf8<br>utf82
gb
<br>
Big5
=>
GB
K
GB
K =>
Big5
GB
2312 =>
GB
K
GB
K =>
GB
2312 互转
Big5
=>
GB
K
GB
K =>
Big5
GB
2312 =>
GB
K
GB
K =>
GB
2312 有关
GB
2312 =〉
BIG5
的
转换
以及
BIG5
=〉
GB
2312 的
转换
可以通过
GB
K 间接实现。先将
GB
2312 转成
GB
K,再将
GB
K 转成
BIG5
,反之亦然。当然...
GB
2312 <=> Unicode、
GB
2312 <=>
Big5
编写 PHP 代码的过程中,经常会遇到需要对中文转码的问题,如
GB
2312 Unicode、
GB
2312
Big5
等等。如果 PHP 编译时带有 mbstring 的话,可以使用 Multi-Byte String Function 实现部
分
转码工作。然而由于很多虚拟...
繁简体(
GB
<=>
Big5
)字符串互转的JAVA方式实现
繁简体(
GB
Big5
)中文字符的转化实现原理很简单,就是根据两种码表的编码规则,创建两者之间的字符对应关系表,通过程序读取这个映射表来自动查出另一种编码方式下对应字符的字节编码,从而进行逐字节的内容替换。...
标签详解
一、定义和用法<meta> 元素可记录并提供有关页面的元信息(meta-information),比如针对搜索引擎优化(SEO)、定义页面使用语言、自动刷新并指向新的页面、实现网页
转换
的动效、控制页面显示窗口、更新频度的描述和...
基础编程
21,886
社区成员
140,364
社区内容
发帖
与我相关
我的任务
基础编程
从PHP安装配置,PHP入门,PHP基础到PHP应用
复制链接
扫一扫
分享
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章