本文对PHP的输出控制功能进行了简单介绍并对其在简繁体转化中的应用给出了具体思路和实例。

一 PHP 输出控制功能介绍

PHP作为当今流行的脚本语言之一,具有编写简便,执行速度快,扩充性好等优点。PHP的输出信息控制函数可以让你控制你的脚本输出的内容,可以用于许多不同的情况,特别是在你的脚本已经输出信息后需要发送文件头的情况以及需要对输出信息进行编辑处理的地方。输出控制函数不对使用 header() 或 setcookie() 发送的文件头信息产生影响,只对那些类似于 echo()、print() 和 PHP 代码的数据块有作用。

http://www.gaodaima.com/46568.html利用PHP输出控制功能做简繁体转换_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 世oW 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 的朋友能从中得到启发,做出更好的作品。

php前台输出繁体,利用PHP输出控制功能做简繁体转换_php相关推荐

  1. 简体繁体转换功能php,PHP输出控制功能在简繁体转换中的应用

    下载本文示例代码 概要:本文对PHP的输出控制功能进行了简单介绍并对其在简繁体转化中的应用给出了具体思路和实例. 一 PHP 输出控制功能介绍 PHP作为当今流行的脚本语言之一,具有编写简便,执行速度 ...

  2. php繁体输出,PHP输出控制功能在简繁体转换中的应用

    概要:本文对PHP的输出控制功能进行了简单介绍并对其在简繁体转化中的应用给出了具体思路和实例 一 PHP 输出控制功能介绍 PHP作为当今流行的脚本语言之一,具有编写简便,执行速度快,扩充性好等优点. ...

  3. [评测] 利用维基百科实现高质量中文简繁转换

    自从有了简体中文以来,中文的简繁转换便成了一项新兴职业,特别是近年来,两岸三地的交流愈发频繁,这种需求更为旺盛.当然,你可以付钱选择专业的公司来帮您完成文件.文章等等的职业级简繁转换:然而,您也可以选 ...

  4. 记录:前端js实现页面内简繁体切换

    一.效果 二.实现 <!DOCTYPE html> <html lang="en"><head><meta charset="U ...

  5. php 设置输出字体,利用PHP的输出信息控制功能实现Web页面简繁字体的自动转换...

    ! " #$% & ' "! () * $% +,,-./ 实践与经验 现代计算机︵总第二 " 七期︶ 引 言 目前,许多网站同时需要简体和繁体字版面的012 页 ...

  6. php查到的内容追加到html,javascript - 请问php中如何将查询出来的结果数组转化成自己想要的格式,并在前台利用js输出到html中...

    考试类型的表jx_exam_type,可后台添加内容 考试成绩的表jx_result,可后台添加内容 期中考试成绩表中的exam_id对应考试类型表中的id,也就是添加的成绩是属于期中还是期末 然后使 ...

  7. php编程输出心形图案_利用php输出不同的心形图案,php心形图案_PHP教程

    利用php输出不同的心形图案,php心形图案 首先为大家分享php输出心形曲线的代码,代码如下 效果如下: 利用php输出笛卡尔心形图案,代码如下 复制代码 代码如下:$width = 600; $h ...

  8. php 实现心芯图案,利用php输出不同的心形图案

    首先为大家分享php输出心形曲线的代码,代码如下 效果如下: 利用php输出笛卡尔心形图案,代码如下 复制代码 代码如下: $width = 600; $height = 650; header(&q ...

  9. 成功解决利用pandas输出DataFrame格式数据表时没有最左边的索引编号(我去,这个问题折腾了我半个多小时)

    成功解决利用pandas输出DataFrame格式数据表时没有最左边的索引编号(我去,这个问题折腾了我半个多小时) 导读:首先,关于这个问题,博主想骂街,经过各种查询,没找到类似问题,然后博主自己不断 ...

  10. C语言学习之利用指针输出二维数组任一行任一列元素的值

    利用指针输出二维数组任一行任一列元素的值. int main(){int a[3][4];int i,j,x,y;int (*p)[4];//指针变量p指向包含4个整型元素的一维数组printf(&q ...

最新文章

  1. linux kbhit扫描键盘,(转)检测按键(Linux中kbhit()函数的实现)
  2. javascript时间处理
  3. linux--监控系统之Zabbix简介(二)
  4. MySQL InnoDB索引介绍及优化
  5. android sdk更新代理设置
  6. 计算机网络之数据链路层:12、CSMA/CA协议-随机访问介质访问控制
  7. [HDU 2191] 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
  8. C语言基础专题 - 存储类(编辑中)
  9. win10远程桌面查看对方计算机名,详细教你win10远程桌面连接命令
  10. python 单向链表逆序_python实现单链表反转(经典笔试题)
  11. 波段高低点指标公式 k线高低点 大盘主图公式
  12. 桌面计算机未响应怎么办,电脑卡死程序未响应的解决方法步骤详解
  13. 计算机的文件夹打不开了,文件夹打不开,详细教您文件夹打不开怎么办
  14. hdu6638 Snowy Smile(线段树+最大子段和)
  15. 由AFX_IDW_PANE_FIRST宏的含义分析界面库XTP的一个bug
  16. 【原】群晖btrfs系统修复
  17. [CTF]2022美团CTF WEB WP
  18. OpenGL画自行车+菜单设置(附源码)
  19. 【大数据入门核心技术-Tez】(四)Tez与Hdfs整合
  20. python boxplot 画盒须图

热门文章

  1. OSG 读取OSGB倾斜数据
  2. w ndows7旗舰版怎么重装系统,windows7旗舰版怎么重装系统|怎么重装系统windows7旗舰版...
  3. 华为星环大数据_华为和星环大数据平台关键能力对比(附报告)
  4. 局域网屏幕共享软件Inletex使用教程
  5. 书评 微权力下的成功项目管控(第2版)
  6. Kafka下载安装及部署
  7. 数字逻辑_逻辑函数化简(配项法)例子
  8. ios 后台唤醒应用_iOS 前后台机制以及后台唤醒机制【个人学习】
  9. 前端安全——XSS攻击与防御原理详解
  10. Linux学习--CentOS可视化配置网络