php 正则表达式

 更新时间:2016年11月25日 16:14  点击:1269

最近在写bbs中,遇上代码转换问题。寻找了很久,才得到一个比较完善的解决办法,可以彻底还原发文者的原文。
以下贴出,供大家指正。
系统:linux+php4+oracle8i

<?
//--标题,名字等字段入库处理(去首尾空格)
function trans_string_trim($str) {
  $str=trim($str);
  $str=eregi_replace(""","""",$str);
  $str=stripslashes($str);
  return $str;
}

//--文章入库处理,即textarea字段;
function trans_string($str) {
  $str=eregi_replace(""","""",$str);
  $str=stripslashes($str);
  return $str;
}

//--从库中显示在表单中;在text中以trans转换,在textarea中,无需转换,直接显示

//--显示在web页面,过滤html代码;包括链接地址
function trans($string) {
  $string=htmlspecialchars($string);
  $string=ereg_replace(chr(10),"<br>",$string);
  $string=ereg_replace(chr(32)," ",$string);
  return $string;   
}

//--显示在web页面,不过滤html代码;
function trans_web($string) {
  $string=ereg_replace(chr(10),"<br>",$string);
  $string=ereg_replace(chr(32)," ",$string);
  return $string;   
}

//--显示在web页面,过滤html代码及头尾空格,主要用于显示用户昵称
function trans_trim($string) {
  $string=trim($string);
  $string=htmlspecialchars($string);
  $string=ereg_replace(chr(10),"<br>",$string);
  $string=ereg_replace(chr(32)," ",$string);
  return $string;   
}

//--显示在span中;
function trans_span($string) {
  $string=ereg_replace(chr(10),"/n",$string);
  $string=ereg_replace(chr(32)," ",$string);
  $string=ereg_replace(""",""",$string);
  return $string;   
}

//--在web上显示cookie,过滤html
function trans_cookie($str) {
  $str=trans($str);
  $str=stripslashes($str);
  $str=eregi_replace("''","'",$str);
  return $str;
}
?>
---------------------------
最后,顺带补充一点,如果在span中显示文章中的一段,采用substr取定长字符串时,记得在span的参数后面多加一个空格,否则遇上截到半个汉字时,会搞乱html代码。

自动微缩图的生成
    由于图片的数据量比较大,传递过程相对较长,所以在用户浏览图片时,常常希望先
显示一个图片的缩略图。
    虽然在HTML中可以通过指定图片的宽度和高度来随意缩放图片,但是这种方法不会
减少图片的像素数目。图形文件的尺寸没有改变,当然也不会加快图片下载的速度了。当
然也可以手动通过图形软件生成图片的缩略图,但对于大量的图片展示来说,这个工作量
将十分巨大。为此微缩图的自动生成程序就被设计出来了。
    PHP中提供的imagecopyresized函数就可以用来生成真正的缩赂图片。该函数的标推
语法如下:
    语法:int imagecopyresized(int dst_im,int src_im,int dstX,int dstY,
int srcX,int srcY,int dstW,int dstH,int srcW,int srcH);
  返回值:整数
  函数种类:图形处理
  内容说明:本函数可复制新图,并重新调整图片的大小尺寸。参数都是目的在前,来
源在后。参数dst im及src_im为图片的handle。参数dstX、dstY、srcX、srcY分别为目的
及来源的坐标。参数dstW、dstH、srcW、srcH分别为来源及目的的宽及高,欲调整的新图
的尺寸就在这儿配置。
    下面举个例子来说明这个函数的用法,对应的程序thumb.php如程序清单12—5所示。
  程序清单12—5  thumb.php
<?
// 本函数从源文件取出图像,设定成指定大小,并输出到目的文件
// 源文件格式:gif,jpg,png
// 目的文件格式:gif
// $srcFile:源文件
// $dstFile: 目标文件
// $dstW:目标图片宽度
// $dstH:目标文件高度
function makethumb($srcFile,$dstFile,$dstW,$dstH)
{
$data = GetImageSize($srcFile,&$info);
switch ($data[2])
{
  case 1:
   $imgsrc = @ImageCreateFromGIF($srcFile);
   break;
  case 2:
   $imgsrc = @ImageCreateFromJPEG($srcFile);
   break;
  case 3:
   $imgsrc = @ImageCreateFromPNG($srcFile);
   break;
}
$srcW = ImageSX($imgsrc);
$srcH = ImageSY($imgsrc);
$ni = ImageCreate($dstW,$dstH);
ImageCopyResized($ni,$imgsrc,0,0,0,0,$dstW,$dstH,$srcW,$srcH);
Imagegif($ni,$dstFile);
// 如果需要输出到浏览器,那么将上一句改为 ImageJpeg($ni);
// 如果需要其他格式的图片,改动最后一句就可以了
}
?>
在这个例子中,首先通过getimagesize()函数获得源图片的情况,再用 imagecreatefromgif()、
imagecreatefromjpeg()或imagecreatefrompng()创建一个源位图$imgsrc,然后用
imagecreate()函数创建一个目标位图,其长、宽各是源位图的一半。然后调用imagecopyresized()
函数,将源位图缩小后拷贝到目标位图中,最后再用imagegif()函数生成缩略图。
    这里所用到的图形处理函数就是由安装的GD库提供的,现对其分别进行说明。首先
介绍getimagesize()函数,其标准语法如下。
    语法:array getimagesize(string filename,array [imageinfo]);
    返回值:数组
    函数种类:图形处理
    内容说明:本函数可用来取得GIF、JPEG及PNG  3种WWW上图片的高与宽,不
需要安装GD library就可以便用本函数。返回的数组有4个元素,返回数组的第一个元素(索
引值0)是图片的高度,单位是像素(pixel);第二个元素(索引值1)是图片的宽度;第三个元
素(索引值2)是图片的文件格式,其值1为GIF格式、2为JPEG/JPG格式、3为PNG格式;
第四个元素(索引值3)为图片的高与宽字符串,height=xxx width=yyy。
    通过getimagesize()函数的应用,能轻易获取图片的各种信息。下面给大家举一个获取
图片宽度、高度、格式、文件大小的信息的例子,来进一步领会getimagesize()函数的使用
技巧。程序imginfo如程序清单12—6所示。
  程序清单12-6  imginfo.php
<?php
function getImageInfo($img) //$img为图像文件绝对路径
{
$img_info = getimagesize($img);
switch ($img_info[2])
{
  case 1:
   $imgtype = "GIF";
   break;
  case 2:
   $imgtype = "JPG";
   break;
  case 3:
   $imgtype = "PNG";
   break;
}
$img_type = $imgtype."图像";
$img_size = ceil(filesize($img)/1000)."k"; //获取文件大小
$new_img_info = array (
  "width"=>$img_info[0],
  "height"=>$img_info[1],
  "type"=>$img_type,
  "size"=>$img_size
  );
print " width";
print $img_info[0];
print " height";
print $img_info[1];
print " format";
print $img_type;
print " size";
print $img_size;
print $new_img_info;
}

$img = "/www/htdocs/images/jf.gif";
getImageInfo($img);
?>
    在程序12-5中要创建一个缩略图,需要先创建一个用来绘图的空白的画布。
ImageCreate函数可以做到这一点。它将返回一个图像的标识符,并且需要告诉函数用像素
计算的画布有多大(x(宽度)与y(高度))。在程序12-5中用到的图形创建函数imagecreate()
的标准语法如下:
    语法:int imagecreate(int x_size,int y_size);
    返回值:整数
    函数种类:图形处理
    内容说明:本函数用来建立一张全空的图形。参数x_size、y_size为图形的尺寸,单位
为像素(pixel)。

    如果要从已经存在的图片中取出图片文件代码,可以用imagecreatefromgif()、
imagecreatefromjpeg()或imagecreatefrompng(),例如函数imagecreatefromgif()就是从一个GIF
格式的图片文件中取出对应的图片源代码,其标准语法如下:
  语法:int imagecreatefromgif(string filename);
  返回值:整数
  函数种类:图形处理
  内容说明:本函数用来取出一张GIF格式图形,通常作为背景或者基本的画布样本使
用。参数filename可以是本地端的文件,也可以是网络的URL地址。返回值为GIF的文件
代码,可供其他函数使用。
    在将源位图缩小后拷贝到目标位图中时,用到了imagecopyresized()函数,此函数可以
复制新图并调整大小,其标准语法如下:
    语法:int imagecopyresized(int dst_im,int src_im,int dstX,int dstY,int srcX,int srcY,
int dstW,int dstH,int srcW,int srcH);
    返回值:整数
    函数种类:图形处理

    内容说明:本函数可复制新图,并重新调整图片的大小尺寸。参数那是目的在前,来
源在后。参数ddst_im及src_im为图片的handle。参数dstX、dstY、srcX、srcY分别为目的
及来源的坐标。参数dstW、dstH、srcW、srcH分别为来源及目的的宽及高,若欲调整新图
的尺寸就在这里配置。
    最后在输出图像时用到的imagegif()函数的标准语法如下:
    语法:int imagegif(int im,string [filename]);
    返问值:整数
    函数种类:图形处理
    内容说明:本函数用来建立一张GIF格式图形。参数im为使用ImageCreate()所建立
的图片代码,参数filename可省略,若无本参数filename,则会将图片直接送到浏览器端,
记得在送出图片之前要先送出使用Content-type:image/gif的标头字符串(header)到浏览器
端,以顺利传输图片。若要使用透明背景的GIF图,也就是GIF89a的格式,需要先使用
ImageColorTransparent()配置透明背景。本函数产生的GIF图,由于有版权的问题,因此
在商业上的使用还要多加考虑。


Ajax异步获取目标内容所耗的时间对比.
方法1. MVC的模式访问目录对象的指定函数,执行查询语句
方法2.直接创建sql语句和数据库连接,执行查询语句 .
方法3.ZendFramework的Zend_Db执行查询语句


Html代码:
<input type="text"name="username" id="username" onblur='cek.checkUser()'/>


将执行以下Js代码:
复制内容到剪贴板

Var cek = {
checkUser : function(user) {
if(!$('modify').value || $('default_user').value != $(user).value) {
var url = "?mod=admin&file=sys&method=checkusername";
//var url = 'test.php’;
//var url = '../private/zend/index.php';
var pars = '';
var myAjax = new Ajax.Request(url,{method:'get',parameters:pars,onComplete:function(contents) {}});
}
}
}
方法1.以MVC模式实现连接数据库并执行查询语句的功能,?mod=admin&file=sys&method=checkusername所执行的代码如下:
复制内容到剪贴板

$application = new SysAction;
$application->checkusername();
Class sysAction {
Function checkusername() {
$link = new DbLink();                        
$rs = $link->checkUser(“username=’crane’”);
}
}
共创建两个对象.SysAction,DbLink,所耗时间如下:

GET  http://localhost/admin/?mod=admin&file=sys&method=checkusername(63ms)
GET  http://localhost/admin/?mod=admin&file=sys&method=checkusername(62ms)
GET  http://localhost/admin/?mod=admin&file=sys&method=checkusername(62ms)
GET  http://localhost/admin/?mod=admin&file=sys&method=checkusername(62ms)
GET  http://localhost/admin/?mod=admin&file=sys&method=checkusername(62ms)
GET  http://localhost/admin/?mod=admin&file=sys&method=checkusername(63ms)


方法2.直接连接数据库,并执行查询语句. test.php所执行代码如下:
复制内容到剪贴板

$db = mysql_connect('localhost','root','123456');
mysql_select_db('test');
$sql = "select * from table where username='crane'";
$result = mysql_query($sql,$db);
while($row = mysql_fetch_array($result)) {}
所耗时间如下:

GET http://localhost/admin/test.php(15ms)
GET http://localhost/admin/test.php(15ms)
GET http://localhost/admin/test.php(15ms)
GET http://localhost/admin/test.php(15ms)
GET http://localhost/admin/test.php(15ms)
GET http://localhost/admin/test.php(15ms)


方法3.ZendFramework框架中Zend_Db类,执行查询语句,../private/zend/index.php代码如下.
主文件部分代码.
复制内容到剪贴板

$frontController =Zend_Controller_Front::getInstance();
$frontController->throwExceptions(true);
$frontController->setControllerDirectory('application/controllers');
$frontController->dispatch();
控制器部分代码:
复制内容到剪贴板

require_once 'Zend/Db.php';
class IndexController extendsZend_Controller_Action {
function init() {
}
functionindexAction() {
$params= array(
"host"=> 'localhost',
"username"=> 'root',
"password"=> '123456',
'dbname' => 'test'
);
//$user= 'crane';
$db= Zend_Db::factory('PDO_MYSQL',$params);
$select= $db->select();
$select->from('table','username')
->where($db->quoteInto('username=?','crane'))
;
$sql= $select->__toString();
$result= $db->fetchAll($sql);
}
}
所耗时间如下:

GET http://localhost/private/zend/index.php(125ms)
GET http://localhost/private/zend/index.php(141ms)
GET http://localhost/private/zend/index.php(110ms)
GET http://localhost/private/zend/index.php(141ms)
GET http://localhost/private/zend/index.php(109ms)
GET http://localhost/private/zend/index.php(141ms)



测试环境:

Windows NT 5.1 build 2600
Apache 2.0
PHP 5.2.5
Mysql 5.0.45
Zend Optimizer v3.3.0

PHP的面向对象一直以来就有争议,这里仅是在异步调用时所耗的时间对比。Mysql与php性能最优的环境当然是lamp,
有兴趣的可以试试在最简最优环境下测试一下。PHP使用对象比不使用对象更耗时间是肯定的,
但PHP的cache和静态化对项目的速度提高有决定性的意义,大型项目的开发,这种机制是必不可少的。这里所做的测试,仅仅说明不同需求的项目,可采用不同的实现方法,没必要凡用必OO
^_^……

Warning: mssql_connect() [function.mssql-connect]: Unable to connect to server: 这个错误很多人都提到,现在我来写写我是解决个办法了.

首先说一下我的系统:winxp+mssql2000+php5.23

先查查你的php目录下有没有ntwdblib.dll有没有这个文件?ntwdblib.dll是客户连接库,如果有查看一下版本号是多少,一般会是7.0的,这个只能与mssql 7.0进行连接,我们为了能与我们现数据库版本相同就把mssql下的ntwdblib.dll拷贝到你php 所在的目录替换那个7.0的,重起apache就OK了.

22:如何取得用户的真实IP


PHP代码:--------------------------------------------------------------------------------

<? 
function iptype1 () { 
if (getenv("HTTP_CLIENT_IP")) { 
   return getenv("HTTP_CLIENT_IP"); 

else { 
   return "none"; 


function iptype2 () { 
if (getenv("HTTP_X_FORWARDED_FOR")) { 
   return getenv("HTTP_X_FORWARDED_FOR"); 

else { 
   return "none"; 


function iptype3 () { 
if (getenv("REMOTE_ADDR")) { 
   return getenv("REMOTE_ADDR"); 

else { 
   return "none"; 


function ip() { 
$ip1 = iptype1(); 
  $ip2 = iptype2(); 
$ip3 = iptype3(); 
if (isset($ip1) && $ip1 != "none" && $ip1 != "unknown") { 
   return $ip1; 

elseif (isset($ip2) && $ip2 != "none" && $ip2 != "unknown") { 
   return $ip2; 

elseif (isset($ip3) && $ip3 != "none" && $ip3 != "unknown") { 
   return $ip3; 
}   
  else { 
  return "none"; 



Echo ip(); 
?> 
--------------------------------------------------------------------------------



23:如何从数据库读取三天内的所有记录

首先表格里要有一个DATETIME字段记录时间,
格式为'2003-7-15 16:50:00'

SELECT * FROM `xltxlm` WHERE TO_DAYS(NOW()) - TO_DAYS(`date`) <= 3;


24:如何远程链接Mysql数据库


在增加用户的mysql表里有一个host字段,修改为"%",或者指定允许连接的ip地址,这样,你就可以远程调用了。

$link=mysql_connect("192.168.1.80:3306","root","");


25:正则到底怎么用

点击这里
正则表达式中的特殊字符


26:用Apache后,主页出现乱码 


方法一: 
AddDefaultCharset ISO-8859-1 改为 AddDefaultCharset off 

方法二: 
AddDefaultCharset GB2312

[!--infotagslink--]

相关文章

  • PHP正则表达式取双引号内的内容

    取双引号内的内容我们如果一个字符串中只有一个可以使用explode来获得,但如果有多个需要使用正则表达式来提取了,具体的例子如下。 写程序的时候总结一点经验,如何只...2016-11-25
  • 一个关于JS正则匹配的踩坑记录

    这篇文章主要给大家介绍了一个关于JS正则匹配的踩坑记录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-13
  • PHP正则表达式之捕获组与非捕获组

    今天遇到一个正则匹配的问题,忽然翻到有捕获组的概念,手册上也是一略而过,百度时无意翻到C#和Java中有对正则捕获组的特殊用法,搜索关键词有PHP时竟然没有相关内容,自己试了一下,发现在PHP中也是可行的,于是总结一下,分享的同...2015-11-08
  • php 验证只能输入汉字、英语、数字的正则表达式

    正则表达式是一门非常有用的并且进行模糊判断的一个功能了,我们下面来看通过正则来验证输入汉字、英语、数字,具体如下。 收藏了正则表达式。可以验证只能输入数...2016-11-25
  • java正则表达式判断前端参数修改表中另一个字段的值

    这篇文章主要介绍了java正则表达式判断前端参数修改表中另一个字段的值,需要的朋友可以参考下...2021-05-07
  • 常用的日期时间正则表达式

    常用的日期时间正则表达式 下面收藏了大量的日期时间正则匹配函数,包括分钟,时间与秒都能达到。 正则表达式 (?n:^(?=d)((?<day>31(?!(.0?[2469]|11))|30(?!.0?2)|29(...2016-11-25
  • PHP正则表达式匹配验证提取网址URL实例总结

    网址规则是可寻的,所以我们可以使用正则表达式来提取字符串中的url地址了,下面一起来看看小编整理的几个PHP正则表达式匹配验证提取网址URL实例. 匹配网址 URL 的...2016-11-25
  • 正则表达式中两个反斜杠的匹配规则详解

    这篇文章主要介绍了正则表达式中两个反斜杠的匹配规则,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-05-07
  • JS中使用正则表达式g模式和非g模式的区别

    这篇文章给大家详细介绍了JS中使用正则表达式g模式和非g模式的区别,非常不错,具有参考借鉴价值,需要的朋友参考下吧...2017-04-03
  • C#正则表达式使用方法示例

    这篇文章主要介绍了C#正则表达式使用方法,大家参考使用...2020-06-25
  • 常用C#正则表达式汇总介绍

    c#正则表达式,用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。...2020-06-25
  • JavaScript利用正则表达式替换字符串中的内容

    本文主要介绍了JavaScript利用正则表达式替换字符串中内容的具体实现方法,并做了简要注释,便于理解。具有一定的参考价值,需要的朋友可以看下...2017-01-09
  • 一文秒懂python正则表达式常用函数

    这篇文章主要介绍了python正则表达式常用函数及使用方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-05-07
  • Idea使用正则表达式批量替换字符串的方法

    这篇文章给大家介绍了Idea使用正则表达式批量替换字符串的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧...2021-07-21
  • js正则学习小记之匹配字符串字面量

    关于匹配字符串问题,有很多种类型,今天讨论 js 代码里的字符串匹配,因为我想学完之后写个语法高亮练手,所以用js代码当作例子...2021-05-07
  • PHP正则表达式之捕获组与非捕获组

    今天遇到一个正则匹配的问题,忽然翻到有捕获组的概念,手册上也是一略而过,百度时无意翻到C#和Java中有对正则捕获组的特殊用法,搜索关键词有PHP时竟然没有相关内容,自己试了一下,发现在PHP中也是可行的,于是总结一下,分享的同...2015-11-08
  • C# 中使用正则表达式匹配字符的含义

    正则表达式的作用用来描述字符串的特征。本文重点给大家介绍C# 中使用正则表达式匹配字符的含义,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧...2020-06-25
  • Python验证的50个常见正则表达式

    这篇文章主要给大家介绍了关于利用Python验证的50个常见正则表达式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-11
  • C#编程自学之运算符和表达式

    这篇文章主要介绍了C#运算符和表达式,这是自学C#编程的第五篇,希望对大家的学习有所帮助。...2020-06-25
  • PHP正则表达式过滤html标签属性(DEMO)

    这篇文章主要介绍了PHP正则表达式过滤html标签属性的相关内容,实用性非常,感兴趣的朋友参考下吧...2016-05-06