首页 > phper

动态网页技术PHP中关于类的几点使用技巧

对类的摸索~~俺用了半年时间才大概理解类的作用和实现。主要是没有一篇能让我理解的文章(之前没接触过任何OO的东西)。

  以我的观点来说说PHP中的Class,用于表达的语言都是非正式的语言,也不能确定是否正确。

  建立一个类很简单:

class my_class {}

  类到底干什么呢?很多人都说是什么黑匣子,我在这里称它为一个独立的整体。我们只知道类名,而不知道里面有什么东西。那么,该如何使用这个类呢?

  首先:要知道它里面是否定义了公共的变量--专业术语上称它为“属性”。
  其次:要知道它里面定义了什么函数--专业术语中称它为“方法”。
  我都被这些专业术语搞糊涂了,所以干脆不理它了。

  类中的如何定义公共变量,它有什么作用呢?

  很简单,我们来扩充 my_class 类:

class my_class
{
var $username;
}

  看上面很简单,我们定义了一个公共的变量,只是用 var 空格 普通变量名构成。它有什么用呢?考虑一下函数中,假如我们要访问函数外的变量,是不是要先 global 一下呢?这个想实现的效果也是如此,它是想让这个类中的所有函数都能访问它,而它区别于函数的一个地方,是类的外部也可以随时访问和控制这个变量,我随后再讲外部如何访问它。还有一个区别,不能用复杂的语句给这个变量赋值(具体的等理解了类以后自己去看规则)。

  给它一个默认值:

class my_class
{
var $username = "深空";
}

OK,定义了一个公共的变量了,接下来定义一个函数(也就是所谓的“方法”):

class my_class
{
var $username = "深空";

function show_username()
{
}
}

这个定义函数跟普通的定义函数形式上没什么区别了。简单就好,定义一个打印 $username 的函数:

class my_class
{
var $username = "深空";

function show_username($username)
{
echo $username;
}
}

  到这里可能某些人开始迷糊了,呵呵,最要害的就是这里了,看清楚了。现在有三个 $username 了。到底哪个是哪个啊~~

阅读全文

动态网页制作PHP常用的正则表达式

匹配中文字符的正则表达式: [u4e00-u9fa5]

  匹配双字节字符(包括汉字在内): [^x00-xff]

  应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

String.prototype.len=function(){return this.replace([^x00-xff]/g,"aa").length;}

  匹配空行的正则表达式: n[s| ]*r

  匹配HTML标记的正则表达式: /<(.*)>.*</>|<(.*) />/

  匹配首尾空格的正则表达式: (^s*)|(s*$)

  应用:javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现,如下:

String.prototype.trim = function() {
return this.replace(/(^s*)|(s*$)/g, "");
}

  利用正则表达式分解和转换IP地址:

  下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的javascript程序:

function IP2V(ip) {
re=/(d ).(d ).(d ).(d )/g //匹配IP地址的正则表达式
if(re.test(ip)) {
return RegExp.*Math.pow(255,3)) RegExp.*Math.pow(255,2)) RegExp.*255 RegExp.*1
}
else {
throw new Error("Not a valid IP address!")
}
}

  不过上面的程序假如不用正则表达式,而直接用split函数来分解可能更简单,程序如下:

var ip="10.100.20.168"
ip=ip.split(".")
alert("IP值是:" (ip[0]*255*255*255 ip[1]*255*255 ip[2]*255 ip[3]*1))

  匹配Email地址的正则表达式: w ([- .]w )*@w ([-.]w )*.w ([-.]w )*

  匹配网址URL的正则表达式: http://([w-] .) [w-] (/[w- ./?%&=]*)?

  利用正则表达式去除字串中重复的字符的算法程序:

var s="abacabefgeeii"
var s1=s.replace(/(.).*/g,"")
var re=new RegExp("[" s1 "]","g")
var s2=s.replace(re,"")
alert(s1 s2) //结果为:abcefgi

  用正则表达式从URL地址中提取文件名的javascript程序,如下结果为page1

s="http://www.etoow.com/page1.htm"
s=s.replace(/(.*/)([^.] ).*/ig,"")
alert(s)

  利用正则表达式限制网页表单里的文本框输入内容:

  用正则表达式限制只能输入中文:

onkeyup="value=value.replace(/[^u4E00-u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,''))"

  用正则表达式限制只能输入全角字符:

onkeyup="value=value.replace(/[^uFF00-uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,''))"

  用正则表达式限制只能输入数字:

onkeyup="value=value.replace(/[^d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"

  用正则表达式限制只能输入数字和英文:

onkeyup="value=value.replace(/[W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,'')

阅读全文

详细阐述PHP环境下如何将GBK编码转成UTF-8格式

apache 字符集 GB 2312
mysql 字符集 GBK
现要从 mysql 中提出信息(GBK) 写入到 XML 中
XML中的编码格式是 UTF-8

那么,如何将GBK编码成 UTF8 ??

具体介绍:
前一阵子见到了qiushuiwuhen君的关于gbk,unicode,big5的转换的文章
但是多少有一些不太大的问题

于是我设计了一个负责字符转换的类,修正了其中的一些不足,增加了部分功能,以后我会不断扩充该类,来支持更多的字符集

增加了如下几点:

unicode->gbk 符号部分的转换
欧元符的识别
big5,Unicode,GBK之间的相互转换,前提是只转换共同的字符集部分,

使用说明:
暂时程序支持以下字符编码方式:
GBK,BIG5,UTF-16BE(Unicode big-endian字节顺序),UTF-16LE(Unicode little-endian字节顺序),UTF-8
默认输入编码方式为GBK,默认输出编码方式为UTF-16BE;
该类别提供两个函数用来修改输入和输出编码方式:
修改输入编码方式 boolean SetGetEncoding(string $GetEncoding)
修改输出编码方式 boolean SetToEncoding(string $ToEncoding)
函数参数只能使用上述5种编码方式,区分大小写,如GBK不能写成gbk
假如设置成功,返回true,假如使用了错误的编码名,返回false,并现实错误信息

函数
string EncodeString(string $String)
负责进行字符编码转换,返回转换后的字符串

使用前,请将var $FilePath=""变量该为该程序文件的绝对路径,否则将会找不到数据文件

例子:
将gbk编码的字符串转化为UTF-8编码:

$s="GBK编码";
$CharEncoding=new Encoding();
$CharEncoding->SetGetEncoding("GBK")||die("编码名错误");
$CharEncoding->SetToEncoding("UTF-8")||die("编码名错误");
echo $CharEncoding->EncodeString($s);

在浏览器中使用UTF-8编码察看,将会看到正确的字符

阅读全文

下拉透明菜单二

function mMenu(caption,command,target,img,sizex,sizey,pos){
 this.items = new Array();
 this.caption=caption;
 this.command=command;
 this.target=target;
 this.img=img;
 this.sizex=sizex;
 this.sizey=sizey;
 this.pos=pos;
 this.id=mMenuRegister(this);
}
function mMenuAddItem(item)
{
  this.items[this.items.length] = item
  item.parent = this.id;
  this.children=true;
}

阅读全文

PHP套接字编程

套接字编程,一般使用c或c 。非凡的在web应用程序开发中,常用perl实现套接字。除此以外,用php进行套接字编程也是一个选择。Php可以胜任吗?当然可以。Php是一门高质量的web应用程序开发语言,他的许多特性可以处理众多的任务,网络编程也不例外。

1. 理解套接字
Mail、ftp、telnet、name和finger这些服务都是在一个专用的公开的端口上提供的,通过连接到这些端口,客户程序就能够访问这些服务。这与现实生活是相似的

阅读全文

下拉透明菜单一部分

下拉透明菜单


<script language="JavaScript">
var mmenus    = new Array();
var misShow   = new Boolean();
misShow=false;
var misdown   = new Boolean();
misdown=false;
var mnumberofsub=0;
var musestatus=false;
var mpopTimer = 0;
mmenucolor='#89CB10';mfontcolor='MenuText';mmenuoutcolor='#ADEF34';mmenuincolor='#B5E74E';mmenuoutbordercolor='#ECFA3A';mmenuinbordercolor='#5A2614';mmidoutcolor='#A9DA1D';mmidincolor='#799310';mmenuovercolor='#004080';mitemedge='0';msubedge='1';mmenuunitwidth=66;mmenuitemwidth=140;mmenuheight=25;mmenuwidth='100%';mmenuadjust=0;mmenuadjustV=0;mfonts='font-family: 宋体; font-size: 9pt; color: MenuText; ';mcursor='hand';
var swipeSteps = 4;
var swipemsec = 25;
var swipeArray = new Array();
function swipe(el, dir, steps, msec) {
 if (steps == null) steps = swipeSteps;
 if (msec == null) msec = swipemsec;
 if (el.swipeIndex == null)
  el.swipeIndex = swipeArray.length;
 if (el.swipeTimer != null)
  window.clearTimeout(el.swipeTimer);
 swipeArray[el.swipeIndex] = el;
 el.style.clip = "rect(-99999, 99999, 99999, -99999)";
 if (el.swipeCounter == null || el.swipeCounter == 0) {
  el.orgLeft  = el.offsetLeft;
  el.orgTop  = el.offsetTop;
  el.orgWidth = el.offsetWidth;
  el.orgHeight  = el.offsetHeight;
 }
 el.swipeCounter = steps;
 el.style.clip = "rect(0,0,0,0)";
 window.setTimeout("repeat(" + dir + "," + el.swipeIndex + "," + steps + "," + msec + ")", msec);
}
function repeat(dir, index, steps, msec) {
 el = swipeArray[index];
 var left   = el.orgLeft;
 var top    = el.orgTop;
 var width  = el.orgWidth;
 var height = el.orgHeight;
 if (el.swipeCounter == 0) {
  el.style.clip = "rect(-99999, 99999, 99999, -99999)";
  return;
 }
 else {
  el.swipeCounter--;
  el.style.visibility = "visible";
  switch (dir) {
   case 2:
    el.style.clip = "rect(" + height*el.swipeCounter/steps + "," + width + "," + height + "," + 0 + ")";
    el.style.top  = top - height*el.swipeCounter/steps;
    break;
   case 8:
    el.style.clip = "rect(" + 0 + "," + width + "," + height*(steps-el.swipeCounter)/steps + "," + 0 + ")";
    el.style.top  = top + height*el.swipeCounter/steps;
    break;
   case 6:
    el.style.clip = "rect(" + 0 + "," + width + "," + height + "," + width*(el.swipeCounter)/steps + ")";
    el.style.left  = left - width*el.swipeCounter/steps;
    break;
   case 4:
    el.style.clip = "rect(" + 0 + "," + width*(swipeSteps - el.swipeCounter)/steps + "," + height + "," + 0 + ")";
    el.style.left  = left + width*el.swipeCounter/steps;
    break;
  }
 
  el.swipeTimer = window.setTimeout("repeat(" + dir + "," + index + "," + steps + "," + msec + ")", msec);
 }
}
var mtmpleft="";
var mtmptop="";
function hideSwipe(el) {
 window.clearTimeout(el.swipeTimer);
 el.style.visibility = "hidden";
 el.style.clip = "rect(-99999, 99999, 99999, -99999)";
 el.swipeCounter = 0;
 if(mtmpleft!="")el.style.left = mtmpleft;
 if(mtmptop!="")el.style.top = mtmptop;
}

阅读全文

php 简单清析文件上传

function Uploadfile(){
   //文件保存目录路径
   $save_path = '../upload/';
   //定义允许上传的文件扩展名
   $ext_arr = array('rar','zip');
   //最大文件大小
   $max_size = 1000000;
   //更改目录权限
   @mkdir($save_path, 0777);
   
   
   //有上传文件时
   if (empty($_FILES) === false) {
    //原文件名
    $file_name = $_FILES['fileData']['name'];
    //服务器上临时文件名
    $tmp_name = $_FILES['fileData']['tmp_name'];
    //文件大小
    $file_size = $_FILES['fileData']['size'];
    //检查目录
    if (@is_dir($save_path) === false) {
     alert("上传目录不存在。");
    }
    //检查目录写权限
    if (@is_writable($save_path) === false) {
     alert("上传目录没有写权限。");
    }
    //检查是否已上传
    if (@is_uploaded_file($tmp_name) === false) {
     alert("临时文件可能不是上传文件。");
    }
    //检查文件大小
    if ($file_size > $max_size) {
     alert("上传文件大小超过限制。");
    }
    //获得文件扩展名
    $temp_arr = explode(".", $file_name);
    $file_ext = array_pop($temp_arr);
    $file_ext = trim($file_ext);
    $file_ext = strtolower($file_ext);
    //检查扩展名
    if (in_array($file_ext, $ext_arr) === false) {
     alert("上传文件扩展名是不允许的扩展名。");
    }
    //移动文件
    if (move_uploaded_file($tmp_name, $file_path) === false) {
     alert("上传文件失败。");
    }
 } 

阅读全文

动态URL静态化

动态URL静态化的主要目的,其一是搜索引擎优化(SEO),其二是面向用户友好。动态URL静态化是把一个动态地址转化成一个静态地址。其实,这个静态地址的内容还是从动态地址来的,只是看起来,类似一个静态地址。例如,本站页面

阅读全文

Php经典分页源码

#*********************************************************
#文件名称: function.php
#功能描述: 新闻添加修改处理模块
#程序制作:留印(adleyliu)
#联系qq  :14339095
#联系邮箱:[email=adleyliu@163.com]adleyliu@163.com[/email]
#官方网站: [url=http://www.115000.com.cn]http://www.115000.com.cn[/url]
#copyright (c) 2007-2008 115000.com.cn all rights reserved.
#最后更新:     2007-11-20
#*********************************************************


#*********************************************************
#分页函数
#*********************************************************
function yl_list_page($pageurl,$rsnum,$pages,$pagecount,$pagesize
){
#url
#总记录
#总页数
#当前页码
#每页显示数
   //$pageurl='?';
   
$pcount $pages
;
   
$page_info '<div class=pagenum>'
;
   
$page_info .= '<div class=num>'

   if ((
$pcount 1) && ($pcount == $pagecount
) ){
       
$page_info .= '<a href = '.$pageurl.'page='.intval($pagecount-1).'>上一页</a>'
;
   }elseif ((
$pagecount != 1) && ($pcount != $pagecount
)){
      
$page_info .= '<a href = '.$pageurl.'page='.intval($pagecount-1).'>上一页</a>'
;
   }
      
$page_info .= '<a href = '.$pageurl.'page=1>页首</a>'
;
   if (
$pagecount 4
){
     
$page_info .= '<a href = '.$pageurl.'page=1>[1]</a><span class=dot>...</span>'
;
   }
   if (
$pcount $pagecount+2
){
       
$endpage $pagecount+2
;
   }else{
     
$endpage $pcount
;
   }
   for (
$n = ($pagecount-2); $n <= $endpage$n
++){
      if (!(
$n 1
)){
         if (
$n == intval($pagecount
)){
         
$page_info .= '<span class=normal>'.$n.'</span>'
;
     }else{
        
$page_info .= '<a href = '.$pageurl.'page='.$n.'>['.$n.']</a>'
;
     }
      }
   }
   if (
$pagecount+$pcount
){
       
$page_info .= '<span class=dot>...</span><a href='.$pageurl.'page='.$pcount.'>['.$pcount.']</a>'
;
   }
       
$page_info .= '<a href = '.$pageurl.'page='.$pcount.'>页尾</a>'
;
   if ((
$pagecount == 1) && ($pcount != $pagecount) && ($pcount != 0
)){
       
$page_info .= '<a href = '.$pageurl.'page='.intval($pagecount 1).'>下一页</a>'
;
   }else if ((
$pagecount != 1) && ($pcount != $pagecount
)){
       
$page_info .= '<a href = '.$pageurl.'page='.intval($pagecount 1).'>下一页</a>'
;
   }
       
$page_info .= '</div></div>'
;
   
$page_info .= '<div class=pagenum>'
;
   
$page_info .= '<div class=num><span class=normal> 共:'.$rsnum .'条/'.$pcount.'页 每页/'.$pagesize.'条</span></div>'
;
   
$page_info .= ' <div class=num>'
;
   
//echo '<form name=page action='.$pageurl.'>';
   
$page_info .= ' 转到'
;
   
$page_info .= '<input type=text name=page value='1' class=login_left style='width:28px;height:18px;'>'
;
   
$page_info .= '页<input type=submit name=submit3 class=login_submit style='width:28px;height:18px;padding-top:1px;' onclick=document.myform.action.value='go'> '
;
   
//echo '</form>';
   
$page_info .= '</div>'
;
   
$page_info .= '</div>'
;
      return 
$page_info
;
}

阅读全文

session 时间设定

对比起 Cookie,Session 是存储在服务器端的会话,相对安全,并且不像 Cookie 那样有存储长度限制,本文简单介绍 Session 的使用。

  由于 Session 是以文本文件形式存储在服务器端的,所以不怕客户端修改 Session 内容。实际上在服务器端的 Session 文件,PHP 自动修改 Session 文件的权限,只保留了系统读和写权限,而且不能通过 ftp 修改,所以安全得多。

阅读全文

下拉透明菜单四

mpmenu1=new mMenu('网站首页','/','self','','','','');
mpmenu1.addItem(new mMenuItem(' 用户注册','/register.asp','self',false,'用户注册',null,'','','',''));
mpmenu1.addItem(new mMenuItem(' 用户登录','/login.asp','self',false,'用户登录',null,'','','',''));
mpmenu1.addItem(new mMenuItem(' 用户退出','/login.asp?action=logout','self',false,'用户退出',null,'','','',''));
mpmenu1.addItem(new mMenuItem(' 资料修改','/bbs/MYMODIFY.ASP','self',false,'',null,'','','',''));
mpmenu2=new mMenu('软件下载','/SoftDown/','self','','','','');
mpmenu2.addItem(new mMenuItem(' 系统程序','/softdown/index.asp?CateID=1','self',false,'系统程序',null,'','','',''));
mpmenu2.addItem(new mMenuItem(' 网络工具','/softdown/index.asp?CateID=2','self',false,'网络工具',null,'','','',''));
mpmenu2.addItem(new mMenuItem(' 媒体工具','/softdown/index.asp?CateID=3','self',false,'媒体工具',null,'','','',''));
mpmenu2.addItem(new mMenuItem(' 图文处理','/softdown/index.asp?CateID=4','self',false,'图文处理',null,'','','',''));
mpmenu2.addItem(new mMenuItem(' 桌面工具','/softdown/index.asp?CateID=5','self',false,'桌面工具',null,'','','',''));
mpmenu2.addItem(new mMenuItem(' 程序代码','/softdown/index.asp?CateID=6','self',false,'程序代码',null,'','','',''));
mpmenu2.addItem(new mMenuItem(' 游戏娱乐','/softdown/index.asp?CateID=7','self',false,'游戏娱乐',null,'','','',''));
mpmenu2.addItem(new mMenuItem(' 其他工具','/softdown/index.asp?CateID=8','self',false,'其他工具',null,'','','',''));
mpmenu2.addItem(new mMenuItem(' 特别栏目','/softdown/index.asp?CateID=9','self',false,'特别栏目',null,'','','',''));
mpmenu2.addItem(new mMenuItem(null,null,null,true));
mpmenu2.addItem(new mMenuItem(' 下载排行','/SoftDown/Index.asp?order=AllHits&updown=desc','self',false,'软件下载排行榜',null,'','','',''));
mpmenu3=new mMenu('软件学院','/SoftSchool/','self','','','','');
mpmenu3.addItem(new mMenuItem(' 软件

阅读全文