PHP清除html格式,去除html、css、js格式

 strip_tags($str) 去掉 HTML 及 PHP 的标记

语法: string strip_tags(string str); 

传回值: 字串 

函式种类: 资料处理 

内容说明 :

本函式可去掉字串中包含的任何 HTML 及 PHP 的标记字串。若是字串的 HTML 及 PHP 标签原来就有错,例如少了大于的符号,则也会传回错误。而本函式和 fgetss() 有着相同的功能

查看更多内容...

Posted in Web开发 at November 1, 2011. by 傻猫 .    Views: 12371    1 Comment

通过PHP curl向腾讯微博发送广播全过程

由于朋友分布在不同的微博,我希望有个同步到twitter、新浪微博、腾讯微博的工具,但等这么久都没出现这样的工具,微博通似乎停工了,也不支持twitter和腾讯微博,于是想自己做个。

新浪微博和twitter都开放API,要实现同步发送很简单,腾讯微博未开放,就需要hack一下了。这次把研究过程都记录下来了,写得很长~实际上在curl实现那部分我花的时间比较多,走的弯路也多,但由于篇幅原因那部分都简省了~

查看更多内容...

Posted in Web开发 at August 19, 2010. by 傻猫 .    Views: 10533    3 Comments

php读取mssql日期出现中文字符的解决方法

最近用php和mssql开发东西发现,用php读取的mssql日期字段会将日期自动转换成中文方式。
比如:2005-12-23 读出以后页面会显示为:2005 十二月 23 ,这样给程序处理带来很多不便。查找了一些资料发现是php.ini默认了日期处理功能。
解决方法为:
第一个方法:php文档开头定义ini_set(”mssql.datetimeconvert”,”0″);
第二个方法:修改php.ini,找到;mssql.datetimeconvert = On ,去掉前面的分号,修改on为off,重启apache即可

Posted in Web开发 at August 8, 2008. by 傻猫 .    Views: 6319    1 Comment

PHP如何去掉转义

使用stripslashes去掉转义,使用addslashes添加转义字符。

string addslashes ( string str) 返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(\')、双引号(\")、反斜线(\\)与 NUL(NULL 字符) stripslashes作用相反在处理mysql和GET、POST的数据时,常常要对数据的引号进行转义操作。 PHP中有三个设置可以实现自动对’(单引号),”(双引号),\\(反斜线)和 NULL 字符转移。 PHP称之为魔术引号,这三项设置分别是 magic_quotes_gpc 影响到 HTTP 请求数据(GET,POST 和 COOKIE)。

不能在运行时改变。在 PHP 中默认值为 on。 magic_quotes_runtime 如果打开的话,大部份从外部来源取得数据并返回的函数,包括从数据库和文本文件,所返回的数据都会被反斜线转义。该选项可在运行的时改变,在 PHP 中的默认值为 off。 magic_quotes_sybase 如果打开的话,将会使用单引号对单引号进行转义而非反斜线。此选项会完全覆盖 magic_quotes_gpc。如果同时打开两个选项的话,单引号将会被转义成 ”。而双引号、反斜线 和 NULL 字符将不会进行转义。虽然方便的实现了对特殊符号的自动转义,但是这样会使得程序效率降低,并导致程序可移植变得麻烦。在不知道服务器ini设置的情况下,还需要调用get_magic_quotes_gpc() ,get_magic_quotes_runtime() 或ini_get()来检测状态。

Posted in Web开发 at August 8, 2008. by 傻猫 .    Views: 4325    No Comments

php 操作 mssql的一些方法

为了能让PHP连接MSSQL,系统需要安装MSSQL,PHP,且在PHP.ini中的配置中,将 ;extension=php_mssql.dll前面的;去掉就可以了.

         1.连接MSSQL
         $conn=mssql_connect("实例名或者服务器IP","用户名","密码");

         //测试连接
         if($conn)
         {
         echo "连接成功";
         }

         2.选择要连接的数据库
         mssql_select_db("dbname");

         3.执行查询
         $rs = mssql_query("select top 1 id,username from tbname",$conn);
         或者直接执行update,insert等语句,可以不用为返回结果赋值
         mssql_query("update tbname set username='niunv' where id=1");

         4.获取记录集行数
         echo mssql_num_rows($rs);

         5.获取记录集
         if($row=mssql_fetch_array($rs))
         {
         $id = $row[0];//获取ID字段值
          $username = $row[1];//获取username字段值

         $username = $row[username];//获取username字段值
         }

         6.获取新增记录的ID
         将id字段设置为IDENTITY字段,执行insert语句以后,就会产生一个 @@IDENTITY 全局变量值,查询出来就是最后一条新增记录的ID了.
         mssql_query("insert into tbname(username) values ('nv')",$conn);
         $rs = mssql_query("select @@IDENTITY as id",$conn);
         if($row=mssql_fetch_array($rs))
         {
         echo $row[0];
         }

         7.释放记录集
         mssql_free_result($rs);

         8.关闭连接
         mssql_close($conn);

Posted in Web开发 at August 6, 2008. by 傻猫 .    Views: 4825    No Comments

apche+php网站防盗链

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://www.samool.com/.*$ [NC]   
RewriteCond %{HTTP_REFERER} !^http://www.samool.com$ [NC]   
RewriteCond %{HTTP_REFERER} !^http://samool.com/.*$ [NC]   
RewriteCond %{HTTP_REFERER} !^http://samool.com$ [NC] 
RewriteRule .*\.(gif|jpg|mp3|rm|wma|exe|rar|zip)$ http://www.samool.com/403.html[R,NC]

请将以上内容保存为.htaccess文件,放在网站根目录,修改红色网址为你的网址,绿色为错误页面。

Posted in 杂七杂八 at May 22, 2008. by 傻猫 .    Views: 3499    No Comments

ThinkPHP第一天:数据库查询功能很强大

ThinkPHP提供强大的数据查询功能,很多查询操作函数在系统中已经内置有了,不需要手动连接数据库,只需要作一下简单的数据连接配置,直接数组参数方式配置和DSN参数进行连接数据库,所有操作都是傻瓜式的,很方便,呵呵,以下内容来源于《ThinkPHP开发指南》。

1、普通查询 

$condition = new HashMap(); 

//  查询 name 为 thinkphp  的记录
$condition‐>put('name','thinkphp'); 

//  使用数组作为查询条件 
$condition = Array(); 
$condition['name'] = 'thinkphp'; 

使用 Map 方式查询和使用数组查询的效果是相同的,并且是可以互换的。 

2、条件查询 

在查询条件里面,如果仅仅使用 

$map‐>put(‘name’,’thinkphp’); 

查询条件应该是  name = ‘thinkphp’ 

如果需要进行其它方式的条件判断,可以使用 

$map‐>put(‘name’,array(‘like’,’thinkphp%’)); 

这样,查询条件就变成  name like ‘thinkphp%’ 

$map‐>put(‘id’,array(‘gt’,100)); 

查询条件  id > 100 

$map‐>put(‘id’,array(‘in’,’1,3,8’)); 

//  或者使用数组范围

$map‐>put(‘id’,array(‘in’,array(1,3,8))); 

上面表示的查询条件都是  id in (1,3,8) 

支持的查询表达式有EQ |NEQ |GT|EGT|LT |ELT |LIKE|BETWEEN|IN|NOT IN 

3、区间查询 

ThinkPHP 支持对某个字段的区间查询,例如: 

$map‐>put('id',array(1,10)); // id >=1 and id<=10 

$map‐>put('id',array('10','3','or')); //id >= 10 or id <=3 

$map‐>put('id',array(array('neq',6),array('gt',3),'and')); // id != 6 and id > 3 

4、组合查询 

如果进行多字段查询,那么字段之间的逻辑关系是 逻辑与  AND,但是用下面的规则可以更改默认的 

逻辑判断,例如下面的查询条件: 

$map‐>put('id',array('neq',1)); 

$map‐>put('name','ok'); 

// 现在的条件是 id !=1 and name like '%ok%' 

$map‐>put('_logic','or'); 

// 现在的条件变为 id !=1 or name like '%ok%' 

5、多字段查询 

ThinkPHP还支持直接对进行多字段查询的方法, 可以简化查询表达式和完成最复杂的查询方法, 例如: 

$map‐>put('id,name,title',array(array('neq',1),array('like','aaa'),array('like','bbb'),’or’)); 

查询条件是  ( id != 1) OR ( name like ‘aaa’) OR ( title like ‘%bbb%’) 

如果结合上面的几种方式,我们可以写出下面更加复杂的查询条件 

$map‐>put(‘id’,array(‘NOT IN’,’1,6,9’)); 

$map‐>put(‘name,email’,array(array(‘like’,’thinkphp’),array(‘like’,’liu21st’),’or’)); 

以上查询条件变成:( id NOT IN(1,6,9) ) AND ( ( name like ‘aaa’) OR ( title like ‘%bbb%’) ) 

6、查询缓存 

ThinkPHP 内建查询缓存支持,可以包括对 SQL 查询缓存、数据对象缓存的缓存支持。对于同一个数据对象的多次查询并不会导致多次数据库的查询开销,系统内置会进行缓存判断。 

7、统计查询 

在应用中我们经常会用到一些统计数据,例如当前所有(或者满足某些条件)的用户数、所有用户的最大积分、用户的平均成绩等等,ThinkPHP 为这些统计操作提供了一系列的内置方法。 

  //  获取用户数 

  $userCount = $User‐>count(); 

  //  获取用户的最大积分 

  $maxScore = $User‐>max(‘score’); 

  //  获取积分大于 0  的用户的最小积分 

  $minScore = $User‐>min(‘score’,’score>0’); 

  //  获取用户的平均积分 

  $avgScore = $User‐>avg(‘score’); 

  //  统计用户的总成绩 

  $sumScore = $User‐>sum(‘score’); 

8、定位查询 

ThinkPHP 支持定位查询,可以使用getN 方法直接返回查询结果中的某个位置的记录。例如: 

  //  返回符合条件的第 2 条记录
  $User‐>getN(2,’score>80’,’score desc’); 

  还可以获取最后第二条记录 
  $User‐>getN(‐2,’score>80’,’score desc’); 

  如果要查询第一条记录,还可以使用 
  $User‐>first(’score>80’,’score desc’);

  //  获取最后一条记录 
  $User‐>last(’score>80’,’score desc’); 

  //  获取积分最高的前 5 条记录 
  $User‐>top(5,’’,’score desc’); 

9、动态查询 

借助  PHP5 语言的特性,ThinkPHP 实现了动态查询。该查询方式针对数据表的字段进行查询。例如,User 对象拥有 id,name,email,address  等属性,那么我们就可以使用下面的查询方法来直接根据某个属性来查询符号条件的记录。 

  $user = $User‐>getByName(‘liu21st’); 
  上面的查询会转化为$User‐>getBy(‘name’,’liu21st’)的查询语言来执行 

  $user = $User‐>getByEmail(‘liu21st@gmail.com’);
  $user = $User‐>getByAddress(‘中国深圳’); 
  暂时不支持多数据字段的动态查询方法,请使用 find 方法和 findAll 方法进行查询。 

  ThinkPHP 还提供了另外一种动态查询方式,就是获取符合条件的前 N 条记录 

  例如,我们需要获取当前用户中积分大于 0,积分最高的前 5 位用户
  $User‐>top5(‘score>0’,’*’,’score desc’); 

  而在另外一个频道,我们需要获取点击最多的前 10 位主播 
  $Master‐>top10(‘’,’*’,’visit desc’); 

10、SQL 查询 

ThinkPHP 支持原生的 SQL 查询,在某些特殊的情况下可以满足应用的需要。 SQL 查询的返回值因为是直接返回的 Db 类的查询结果,没有做任何的处理,所以永远是返回的数据集对象或者惰性数据查询对象。而且可以支持查询缓存、延迟加载和事务锁 (悲观锁)。 

SQL 查询使用 query 方法 
$list = $User‐>query(“select id,name from think_user”);

如果没有使用延迟加载,返回结果是   ArrayObject  对象,如果启用了延迟加载,那么返回的是ResultIterator 对象。 

11、事务支持 

ThinkPHP 提供了单数据库的事务支持,如果要在应用逻辑中使用事务,可以参考下面的方法: 

//  启动事务 
$User‐>startTrans() 

//  提交事务 
$User‐>commit() 

//  事务回滚 
$User‐>rollback(); 

在有些对多个数据的批量操作中,已经内建了事务支持。 

Posted in 杂七杂八 at March 13, 2008. by 傻猫 .    Views: 12790    No Comments

ThinkPHP第一天:CURD很好很强大

昨天看了一下ThinkPHP的一些介绍,就提到了CURD操作数据库,在百度问了问,没找到是什么意思,查出来全是药物类的资料,哈哈,今天“狗狗”了一下,在ThinkPHP官方论坛看到,其实CURD的意思就是数据库四种操作的合称,即“Create,Update,Read,Delete(创建,修改,读取,删除)”,在开发指南里也有详细介绍。

今天是第一天全面学习ThinkPHP,分别用代码直接输出方式做了一个Hello,ThinkPHP的例子,另外也用模板文件方式也做了一个,第一次感受到ThinkPHP的简单与方便。下午仔细看了一下CURDR的操作,作一下笔记,就当是复习一下今天学到的新东西吧,加深印象。

ThinkPHP 提供了灵活和方便的数据操作方法,不仅实现了对数据库操作的四大基本操作(CURD):创建、读取、更新和删除的实现,还内置了很多实用的数据操作方法,提供了 ActiveRecords 模式的最佳体验。 

Model 类将数据库操作统一为 CURD 和一个 SQL 查询方法,也就是
_create  新增 (写入)数据
_update  更新 (保存)数据
_read  读取(查询)数据
_delete  删除数据 
_query SQL 查询

其它的所有方法基本上对你调用这些基础方法进行操作,但是我们无需关注这些细节,只需要按照提供的抽象方法来操作,我们来看看在 ThinkPHP 中是怎么进行数据操作的。 

1、新建记录
//  实例化一个 User 模型对象
$User = new UserModel(); 

//  然后给数据对象赋值
$User‐>name = ‘ThinkPHP’;
$User‐>email = ‘ThinkPHP@gmail.com’

//  然后就可以保存新建的 User 对象了
$User‐>add(); 

//  如果需要锁实例化模型对象的时候传入数据,可以使用
$data[‘name’] = ‘ThinkPHP’; 
$data[‘email’] = ‘ThinkPHP@gmail.com’
$User = new UserModel($data); 
$User‐>add();

//  或者直接在 add 方法传入要新建的数据
$data[‘name’] = ‘ThinkPHP’; 
$data[‘email’] = ‘ThinkPHP@gmail.com’
$User = new UserModel(); 
$User‐>add($data); 

如果你的主键是自动增长类型,不需要传入主键的值就可以新建数据,并且如果插入数据成功的话,Add 方法的返回值就是最新插入的主键值,可以直接获取。 
$insertId   =   $User‐>add($data); 

一般情况下,应用中的数据对象不太可能通过手动赋值的方式写入,而是有个数据对象的创建过程。
ThinkPHP 提供了一个 create 方法来创建数据对象,然后进行其它的新增或者编辑操作。
$User = D(“User”); 
$User‐>create(); //  创建 User 数据对象,默认通过表单提交的数据进行创建
$User‐>add(); //  新增表单提交的数据 

Create 方法支持从其它方式创建数据对象,例如,从其它的数据对象,或者数组等
$data[‘name’] = ‘ThinkPHP’; 
$data[‘email’] = ‘ThinkPHP@gmail.com’
$User‐>create($data); 

//  从 User 数据对象创建新的 Member 数据对象 
$Member = D(“Member”); 
$Member‐>create($User); 

支持新增多条记录 
$User = new UserModel(); 
$data[0][‘name’] = ‘ThinkPHP’; 
$data[0][‘email’] = ‘ThinkPHP@gmail.com’
$data[1][‘name’] = ‘流年’; 
$data[1][‘email’] = ‘liu21st@gmail.com’
$User‐>addAll($data);

在 MySql 数据库下面,会自动使用一条 SQL 语句实现多数据的插入。 

2、查询记录 

读取数据库的记录我觉得是数据库操作中的最有意思的一件事情了,写过文本数据库的人都知道,保存和删除数据不难 (无非是规范和效率问题),难在可以通过各种方式来查找需要的数据。ThinkPHP 通过各种努力,让数据库的查询操作变得轻而易举,也让 ThinkPHP 变得富有内涵。 

ThinkPHP 有一个非常明确的约定,就是单个数据查询和多个数据查询的方法是分开的,或者你会认为有时候自己也不知道要查询的数据是单个还是多个,但是有一点是明确的,你需要的是返回一个数据还是希望返回的是一个数据集。因为对两种类型的返回数据的操作方式是截然不同的,无论何种方式的返回,我们都可以直接在模型对象里面操作,当然也一样可以作为数据传递给你需要的变量。 

先举个最简单的例子,假如我们要查询主键为 8  的某个用户记录,我们可以使用下面的一些方法:
$User‐>find(8); 
这个作为查询语言来说是最为直观的,如果查询成功,查询的结果直接保存在当前的数据对象中,在进行下一次查询操作之前,我们都可以提取,例如获取查询的结果数据: 
$name = $User‐>name; 
$email = $User‐>email; 

遍历查询到的数据对象属性 
foreach ($User as $key=>$val){ 
  echo($key.’:’.$val); 

//  或者进行相关的数据更改和保存操作
也可以用变量保存下来以便随时使用。 
$user = $User‐>find(8); 
对于上面的查询条件,我们还可以使用getById 来完成相同的查询
$User‐>getById(8); 
需要注意的是,对于  find  方法来说,即使查询结果有多条记录,也只会返回符合条件的第一条记录,如果要返回符合要求的所有记录,请使用 findAll 方法。

//  查询主键为 1、3、8  的记录集
$User‐>findAll(‘1,3,8’); 

//  遍历数据列表 
foreach ($User as $vo){ 
  dump($vo‐>name); 


3、更新记录 

了解了查询记录后,更新操作就显得非常简单了。 

  $User‐>find(1); //  查找主键为 1  的数据
  $User‐>name = ‘TOPThink’; //  修改数据对象 
  $User‐>save(); //  保存当前数据对象 

  //  还可以使用下面的方式更新 
  $User‐>score = ‘(score+1)’; //  对用户的积分加 1 
  $User‐>save(); 

如果不是使用数据对象的方式来保存,可以传入要保存的数据和条件 
  $data[‘id’] = 1; 
  $data[‘name’] = ‘TopThink’; 
  $User‐>save($data); 

除了 save 方法外,你还可以使用 setField 方法来更新特定字段的值,例如:
  $User‐>setField(“name”,”TopThink”,’id=1’); 

同样可以支持对字段的操作 
  $User‐>setField(“score”,”(score+1)”,’id=1’); 

  //  或者改成下面的 
  $User‐>setInc(“score”,’id=1’); 

4、删除记录 
  $User‐>find(2); 
  $User‐>delete(); //  删除查找到的记录
 
  $User‐>delete(‘5,6’); //  删除主键为 5、6  的数据
  $User‐>deleteAll(); //  删除查询出来的所有数据

Posted in 杂七杂八 at March 13, 2008. by 傻猫 .    Views: 8674    No Comments