PHP编程:使用PHP输入掌握功效做简繁体转换
可以说你的马步已经扎的差不多了,接下来就要开始练把势的时候了,如果有条件的话,用笔或者打印一个简易的PHP手册在身上,时不时的摸出来看看,记得,去WC也不能放过(^2^)。掌握|转换 【摘 要】 PHP 作为一种公然源代码的剧本言语,其扩大性长短常好的。本文只是对其一个功效的一种使用体例的切磋,并完成了对照完善的统一页面主动简繁体转换功效。但愿宽大喜好 PHP 的伴侣能从中失掉启示,做出更好的作品。 <P>本文对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()- 翻开输入缓冲区
一切的输入信息不在直接发送到阅读器,而是保留在输入缓冲区外面,可选得回调函数用于处置输入了局信息。
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;
$str[$i+1] = $gb;
$i++;
}
}
return $str;
}
?>
个中:
$gb_big5_ 保留着big5 的字库对比表
$str 为要转化的字符串
<P> 三 输入掌握函数在简繁体转化中的使用
今朝的大多半网站的简繁体页面转换都是经由过程各自独自的页面完成的,如许招致在修正简体页面的时分还需求再次修正繁体的页面,不克不及做到主动同步。而咱们供应的这个办法,可以完成统一个页面主动的变换简繁体显示。其完成办法是:
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 的伴侣能从中失掉启示,做出更好的作品。 咱们就开始学习动态语言的概念吧,刚一接触动态语言,可能很多人都会蒙了,怎么这乱七八糟的东西,在网页里显示的时候却是另外一码事?其实这并不算乱七八糟,你写的HTML代码不也一样是一堆堆的字符吗?毕竟,代码并不是作为直接输出的,而是经过处理的,说白了,HTML是经过HTML解析器,而PHP当然也就通过PHP解析器了,跟学习HTML一样的道理,想让任何的解析器完成操作,就必须使用它们专用的语法结构,所以PHP长相奇怪也就不足为奇了。 多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。 建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。 小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。 最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。 有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。 不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。 为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。 曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线\\\\\\\'_\\\\\\\' ; 为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。 在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、 对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。 这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己 不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。 使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的 说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。 这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。 开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。 php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会) 环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。
页:
[1]
2