仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1084|回复: 18
打印 上一主题 下一主题

[学习教程] PHP网站制作之PHP输入掌握功效在简繁体转换中的使用

[复制链接]
再见西城 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:20:46 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
多个成员之间重复做相同的工作,很容易因为交流沟通的时候没有进行一致性的文档要求而出现不明错误,严重影响开发进度,导致在预定时间内无法完成该项目或者完成的项目跟原先计划所要实现的项目功能不符合。掌握|转换   概要:本文对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 世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 的伴侣能从中失掉启示,做出更好的作品。  exit来实现结束后面的PHP语句的执行,缩小调试范围,特别是数据库交互的程序,先输出个SQL语句看看,对了,再分析怎么会插入/删除不成功呢?这样对查错很有帮助。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-16 03:44

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表