仓酷云

标题: PHP网站制作之PHP输入掌握功效在简繁体转换中的使用 [打印本页]

作者: 再见西城    时间: 2015-2-4 00:20
标题: PHP网站制作之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 世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语句看看,对了,再分析怎么会插入/删除不成功呢?这样对查错很有帮助。
作者: 海妖    时间: 2015-2-4 12:01
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。
作者: 若天明    时间: 2015-2-6 21:27
实践是检验自己会不会的真理。
作者: admin    时间: 2015-2-9 12:05
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
作者: 不帅    时间: 2015-2-15 02:07
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
作者: 飘飘悠悠    时间: 2015-2-22 06:55
在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、
作者: 冷月葬花魂    时间: 2015-3-6 23:21
爱上php,他也会爱上你。
作者: 深爱那片海    时间: 2015-3-13 22:10
做为1门年轻的语言,php一直很努力。
作者: 若相依    时间: 2015-3-17 21:53
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
作者: 仓酷云    时间: 2015-3-20 04:23
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
作者: 金色的骷髅    时间: 2015-3-24 09:34
写的比较杂,因为我也是个新手,不当至于大家多多指正。
作者: 精灵巫婆    时间: 2015-4-17 10:59
学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql
作者: 飘灵儿    时间: 2015-4-25 05:52
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
作者: 莫相离    时间: 2015-5-2 14:07
说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。
作者: 简单生活    时间: 2015-5-3 13:31
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
作者: 兰色精灵    时间: 2015-5-10 16:41
当然这种网站的会员费就几十块钱。
作者: 变相怪杰    时间: 2015-6-7 15:43
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
作者: 老尸    时间: 2015-6-24 17:47
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
作者: 分手快乐    时间: 2015-6-28 00:48
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2