addslashes,mysql_real_escape_string和mysql_escape_string介绍
以前还真没有关注过这面的事情。自己在写的时候都是用了一个很简单的函数addslashes() 函数在指定的预定义字符前添加反斜杠。
这些预定义字符是:
•单引号 (')
•双引号 (")
•反斜杠 ()
•NULL
代码如下 | 复制代码 |
<?php as_array($_POST); |
虽然国内很多PHP程序员仍在依靠addslashes防止SQL注入,还是建议大家加强中文防止SQL注入的检查。addslashes的问题在 于黑客 可以用0xbf27来代替单引号,而addslashes只是将0xbf27修改为0xbf5c27,成为一个有效的多字节字符,其中的0xbf5c仍会 被看作是单引号,所以addslashes无法成功拦截。
当然addslashes也不是毫无用处,它是用于单字节字符串的处理,多字节字符还是用mysql_real_escape_string吧。
另外对于php手册中get_magic_quotes_gpc的举例:
代码如下 | 复制代码 |
if (!get_magic_quotes_gpc()) { |
最好对magic_quotes_gpc已经开放的情况下,还是对$_POST[’lastname’]进行检查一下。
再说下mysql_real_escape_string和mysql_escape_string这2个函数的区别:
mysql_real_escape_string 必须在(PHP 4 >= 4.3.0, PHP 5)的情况下才能使用。 mysql_escape_string (PHP 4 >= 4.0.3, PHP 5, 注意:在PHP5.3中已经弃用这种方法,不推荐使用),
<?php
// 说明:用 array_map() 调用 mysql_real_escape_string 清理数组
// 整理:http://www.111cn.net
function mysqlClean($data)
{
return (is_array($data))?array_map('mysqlClean', $data):mysql_real_escape_string($data);
}
?>
两者的区别是:mysql_real_escape_string 考虑到连接的当前字符集,而mysql_escape_string 不考虑。
总结一下:
PHP代码
代码如下 | 复制代码 |
<?php |
Cookie是什么意思?
Cookie是用来存储用户名、密码、访问该站点的次数等。在访问某个网站时,Cookie将html网页发送到浏览器中一个小段信息,以脚本的形式保存在客户端的计算机上。
Cookie有什么用?如果用服务器去记录个用户上站的次数,那么长期积累下来数据必然十分庞大,对服务器来说负担很中。因此,可以将数据存入到用户自己的计算机中,等到需要时服务器再读取用户计算机上的Cookie提取数据,这样一来服务器就不需要记录大量的数据。
一般来说,Cookie通过HTTP Headers从服务器端返回浏览器。首先,服务器端在响应中利用Set Cookie Header来创建一个Cookie。然后浏览器在请求中通过Cookie Header包含这个已经创建的Cookie,并且将它返回至服务器,从而完成浏览器的验证。
Cookie的创建
php创建一个Cookie需要调用setcookie()函数,其结构形式如下:
bool setcookie(string name[,string value[,int expiration[,string path[,bool secure]]]])
参数name表示Cookie的名称,其它参数可选;
参数value是存入Cookie的值;
参数expiration指定Cookie过期的时间;
参数path指定Cookie在服务器上的有效路径,用来设置Cookie将被发送到服务器的那一个文件夹下;
参数secure指定Cookie是否通过安全的https链接发送。
php cookie实例代码:
代码如下 | 复制代码 |
<?php |
cookie的访问
大多数变量只在内存占用空间,因此当php脚本终结时变量也从内存中被释放清空。而Cookie可以将变量的值长期存储到用户计算机的硬盘,当我们需要调用此变量的值时,读取该Cookie的名称即可。
前面一节Cookie的创建已经建立了一个命名为”c1″的Cookie,下面我们来测试一下这个Cookie是否成功创建了。
php 访问Cookie的实例:
代码如下 | 复制代码 |
<?php |
Cookie的时间
如果没有设置Cookie的有效时间,那么当关闭浏览器时Cookie就会消失。如果要保留Cookie,就必须给它设置一个有效的时间。
php Cookie时间设置方法:
time()+秒数
time()表示目前用户操作系统的时间,后面的秒数即是Cookie的有效时间。如果要制定一个特定的日期,可以使用mktime()函数,其结构形式如下:
mktime(时,分,秒,月,日,年)
如果要立即删除一个Cookie,可以将时间设置成过去的一个时间即可。
php Cookie时间设置例子:
代码如下 | 复制代码 |
setcookie("a","10",time()-60); /* 设置时间为之前60秒,其值立即被删 */ setcookie("a","10",time()+60); /* 设置有效时间为60秒 */ setcookie("a","10",mktime(0,0,0,11,1,2011)); /* 失效时间为2011年11月1日0点0分0秒 */ |
下面介绍一个利用Cookie设计的一个简单统计程序:
代码如下 | 复制代码 |
<?php |
Cookie数组
我们同样可以创建一个php cookie数组,下面通过实例介绍实现方法。
代码:
代码如下 | 复制代码 |
<?php setcookie('name[1]','Rose'); setcookie('name[2]','John'); setcookie('name[3]','Mikle'); if(is_array($_COOKIE['name'])){ /* 判断是否数组 */ foreach($_COOKIE['name'] as $name=>$value) { echo "$name:$value<br>"; } } else echo "不是数组"; ?> |
Cookie的限制
Cookie是用来存储用户浏览网站的重要信息,为了防止乱用导致用户的信息泄露,所以对Cookie作出一定的限制:
浏览器记录用户cookie大小限制在4KB以内的容量;
浏览器只保存某个站点服务器的Cookie数量限制在20个,如果超出这个数量,则之前保存的会被删除。
每个用户的浏览器最多只能访问300个Cookie。
用户可以在浏览器设置是否启用Cookie存储信息,因此,要使用Cookie存储信息,必须先确认浏览器中Cookie的功能是否已经打开。例如IE9浏览器,打开“属性”–“隐私”–“高级”选项,选中启用即可:
提示:浏览器创建了一个Cookie之后,对于每个针对该网站的请求都会在Header中带着这个Cookie。而且浏览器会一直发送,知道Cookie过期位置。不过对于其它网站的请求,Cookie是绝对不会跟着发送的。
php字符串查找字符可以通过strstr()、strrchr()函数来实现,两个函数的结构形式如下:
strstr($haystack, $needle)
strrchr($haystack, $needle)
//$haystack表示母字符串,$needle表示要查找的字符
strstr()函数用于查找第一次出现字符的位置,并返回从此位置开始到母字符串结束的部分;
strrchr()函数用于查找最后一次出现字符的位置,并返回从此位置开始到母字符串结束的部分。
实例:
代码如下 | 复制代码 |
<?php $a="p"; $b="echo是php函数,p是html标记"; $str1=strstr($b,$a); if($str1) echo $str1 ."<br>"; else echo "找不到p" ."<br>"; $str2=strrchr($b,$a); if($str2) echo $str2; else echo "找不到p"; ?> |
php字符串出现次数的查找可以通过substr_count()函数来实现,其结构形式:
substr_count($haystack, $needle [,$offset [,$length]])
//$haystack表示母字符串,$needl表示要查找的字符
//$offset表示查找的起点,$length表示查找的长度,均为可选参数
实例:
代码如下 | 复制代码 |
<?php |
php查找字符串位置可以通过strrpos()、strpos()函数来实现。
查找最后一次的位置
用函数strrpos(),结构形式如下:
strrpos($haystack ,$needle [,$offset])
//参数$needle只能是一个字符,而不能是一个字符串。如果提供一个字符串,也只会取字符串中的第一个字符,其它字符无效;
//可选参数$offset设置查找字符串的长度。
实例1:
代码如下 | 复制代码 |
<?php |
查找第一次的位置
用strpos()函数,与函数strrpo()仅差一个字母,功能却相差很大。strpos()函数的$needle参数允许使用字符串,并且查找这个字符串在$haystack中的第一次出现的位置,而不是最后一次。
实例:
代码如下 | 复制代码 |
<?php |
什么是数组?
数组是一个数据的集合,相当于一个容器,可以将数据按一定的规则存到这个容器中。相当于旅馆,旅馆内有很多房间,而房间按照一定的规则编号。
数组的构成:基本结构形式如下:
$数组名 (键)= 值 数组名:是一个数组区别于另一个数组的方式,就像每个旅馆都有一个名字。
键(key):也成为指针、索引或者标识符。键代表某值在数组中存放的位置,相当于旅馆的门牌号,可以用不同方式命名。通过查询键可以找到相应的值。
值(value):值相当于房间内存放的东西。
赋值创建数组
在php中,创建数组有变量赋值和调用函数两种方法,这里先讲前者。
使用变量赋值方法很简单,直接给一个数组变量赋值即可。
实例:
代码如下 | 复制代码 |
<?php |
三个赋值语句产生的数组内容:
0=>php
1=>html
2=>css
创建数组
除了上面介绍的赋值创建数组,还有调用函数的方法创建数组。
php提供了array函数来穿件一个数组,基本结构形式如下:
array (item1,item2... ,itemn)
/* item表示数组中的元素值。array()函数创建数组时自动给元素值分配标识符,从0依次增加 */
实例:
代码如下 | 复制代码 |
<?php |
数组键名
1、键名分配
在用array()函数创建数组时,键名会自动分配到各个值。另外,我们也可以按自己的需要直接给元素分配键名。
基本结构形式:
array ( key => item )
实例1:
代码如下 | 复制代码 |
<?php $a=array(1 => "you",2 =>"are ", 5 =>"how "); echo $a[5]; echo $a[2]; echo $a[1]; ?> |
2、用字符串作键名
不但可以用整数作为键名,也可以使用字符串作为键名。使用字符串作为键名的数组成为字符串索引(string-indexed)数组。
实例2:
代码如下 | 复制代码 |
<?php $a=array("php"=>"动态网页","html"=>"静态网页","css"=>"网页排版"); echo $a["php"] ."<br>"; echo $a["html"] ."<br>"; echo $a["css"]; ?> |
3、键名的修改
实例3:
代码如下 | 复制代码 |
<?php |
创建多维数组
在php程序编写时,一维数组有时不能满足需求,这时就要用到多维数组。多维数组就是在一维数组的基础上再增加一个或多个细下标,用法与一维数组大致相同,只是多维数据操作更为复杂,不过功能更强大。
以二维数组为例,就像大房子里面套有小房子,表示方法为$a[0][0]。
实例:
代码如下 | 复制代码 |
<?php |
输出数组
输出数组是指将数组的的所有元素数据显示在浏览器上,php怎么输出数组?常用的php输出数组函数有var_dump()和print_r()函数。
1、var_dump函数递归展开数组元素,显示数组各元素的类型、键名和元素值。
实例1:
代码如下 | 复制代码 |
<?php $a=array(0,5,array("php","html","css")); /* 创建一个嵌套的数组 */ var_dump($a); ?> |
2、print_r函数值显示数组元素的键名和元素值。
实例2:
代码如下 | 复制代码 |
|
测试数组
有时候我们不清楚某个变量是不是数组,可以用is_array()函数来测试判断。
基本结构形式:
is_array ( 变 量 )
检测变量是否数组,如果是则返回true,否则返回false。
实例:
代码如下 | 复制代码 |
<?php |
foreach遍历数组
我们在运用数组时,常常要遍历数组并获得各个键或者元素值,php提供了一些专门遍历数组的函数。这里先介绍foreach遍历数组函数的用法。
结构形式:
代码如下 | 复制代码 |
<?php |
通过foreach不仅可以获得元素的值也可以获得键名,结构形式:
foreach ( array_expression as $key => $value ) statement
将以上实例中第7行的代码:
代码如下 | 复制代码 |
foreach( $color as $c) echo $c ."<br>";
|
查找数组元素值
php获取数组键名可以用array_search()来实现,结构形式如下:
array_search( $needle,$haystack )
/* 参数$needle表示要查找的值 */
/* $haystack表示查找对象 */
array_search()函数返回的是键名,而不是布尔值,找不到时返回false。找到的元素如果正好是第一个元素,则返回0。而php会自动转化成false,所以需要使用”===”判断返回值。(“===”判断是否全等,详:php关系运算符)
实例:
代码如下 | 复制代码 |
<?php |
计算数组元素个数
数组也像变量一样可以进行运算,例如需要php统计数组元素个数时,我们可以利用count()函数来计算数组中元素的个数。
结构形式:
代码如下 | 复制代码 |
<?php |
数组排序
php提供了一系列的数组排序函数,我们可以根据需要对数组进行排序。数组的排序主要有三种方式:
按键值排序
即按标识符ASCⅡ码值的大小排列顺序。
ksort(): 按照数组标识符顺序排列
krsort(): 按照数组标识符逆序排
实例1:
代码如下 | 复制代码 |
<?php $languages=array( 'c'=>'php', 'd'=>'asp', 'a'=>'jsp', 'b'=>'java' ); krsort($languages); foreach($languages as $key=>$val){ echo "$key = $val".'<br>'; }; ?> |
按元素值排序
asort(): 按照由小到大的顺序对数组排序;
rsort(): 按照由大到小的顺序对数组逆序排序。
将实例1的8-11行代码改为:
代码如下 | 复制代码 |
asort($languages); print_r($languages); echo "<br>"; rsort($languages); print_r($languages); |
删除原有键名排序
sort(): 按照由小到大的顺序对数组排序;
rsort(): 按照由大到小的顺序对数组逆序排序。
将实例2的8-11行代码改为:
代码如下 | 复制代码 |
sort($languages);
|
数组运算符
合并数组计算实例:
代码如下 | 复制代码 |
<?php $a=array( 'a'=>'php', 'b'=>'html', 'c'=>'css' ); $b=array( 'a'=>'asp', 'b'=>'jsp' ); $c=$a+$b; /* 合并数组 */ var_dump($c); echo "<br>"; $c=$b+$a; /* 调换顺序合并数组 */ var_dump($c); ?> |
数组的比较实例:
代码如下 | 复制代码 |
<?php $a=array('php','asp'); $b=array(1=>'asp',0=>'php'); var_dump($a==$b); var_dump($a===$b); ?> |
例子 | 名称 | 结果 |
---|---|---|
$a + $b | 联合 | $a 和 $b 的联合。 |
$a == $b | 相等 | 如果 $a 和 $b 具有相同的键/值对则为 TRUE。 |
$a === $b | 全等 | 如果 $a 和 $b 具有相同的键/值对并且顺序和类型都相同则为 TRUE。 |
$a != $b | 不等 | 如果 $a 不等于 $b 则为 TRUE。 |
$a <> $b | 不等 | 如果 $a 不等于 $b 则为 TRUE。 |
$a !== $b | 不全等 | 如果 $a 不全等于 $b 则为 TRUE。 |
foreach遍历数组
我们在运用数组时,常常要遍历数组并获得各个键或者元素值,php提供了一些专门遍历数组的函数。这里先介绍foreach遍历数组函数的用法。
结构形式:
foreach ( array_expression as $value ) statement
/* array_expression是要遍历的数组
as作用是将数组的值赋给$value
statement是后续语句
*/
实例1:
代码如下 | 复制代码 |
<?php |
通过foreach不仅可以获得元素的值也可以获得键名,结构形式:
foreach ( array_expression as $key => $value ) statement
将以上实例中第7行的代码:
代码如下 | 复制代码 |
改为: foreach( $color as $key => $c) echo $key.$c ."<br>"; |
each遍历数组
遍历数组是php数组操作一个重要的环节,除了前面提到的foreach函数,这里再介绍一个遍历数组的函数-each()。
用each()函数可以输出当前指针位置的键名和对应的元素值。可以使用”0″或”key”来访问键名(标识符),用”1″或”value”访问标识符对应的值。
实例:
代码如下 | 复制代码 |
<?php |
list遍历数组
函数list可以在遍历数组时一次赋给变量,通常和each()函数配合使用。用list()函数使访问each()返回的键和值变得更加简单了。
实例:
代码如下 | 复制代码 |
<?php $date=array(1=>"Monday", 2=>"Tuesday", 3=>"Wednesday"); list($key,$value)=each($date); /* 遍历函数 */ echo "$key $value" ."<br>"; /* 输出第一个数组 */ $next=next($date); /* 指针后移 */ echo "$next"; ?> |
ps:list()函数刚好与array()函数相反,array()将一系列数据构造成数组,而list()则将数组拆分成数据。
for遍历数组
除了php预定义的一些遍历数组函数,我们还可以利用for语句的循环特性将数组遍历输出。下面给出例子:
代码如下 | 复制代码 |
<?php |
相关文章
- 这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
mybatis 返回Integer,Double,String等类型的数据操作
这篇文章主要介绍了mybatis 返回Integer,Double,String等类型的数据操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-25- 本篇文章小编并不是为大家讲解string类型的用法,而是讲解我个人比较好奇的问题,就是string 类型占几个字节...2020-04-25
- 这篇文章主要介绍了Substring截取字符串方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
- 下面小编就为大家带来一篇java中String类型变量的赋值问题介绍。小编觉得挺不错的。现在分享给大家,给大家一个参考。...2016-03-28
- 本文给大家分享了C# 中string.split用法的相关知识,非常不错,具有参考借鉴价值,需要的朋友参考下吧...2020-06-25
- 很多类都重写了ToString方法, 导致很多类的tostring到底执行了什么,有哪些参数,都不清楚...2020-06-25
- string与[]byte经常需要互相转化,普通转化会发生底层数据的复制,下面这篇文章主要给大家介绍了关于Go中string与[]byte高效互转的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下...2021-09-20
- 这篇文章主要介绍了在C#的类或结构中重写ToString方法的用法简介,需要的朋友可以参考下...2020-06-25
Javascript实现Array和String互转换的方法
这篇文章主要介绍了Javascript实现Array和String互转换的方法,涉及JavaScript中toString方法与split方法的使用技巧,需要的朋友可以参考下...2015-12-24- 这篇文章主要介绍了C#中enum和string的相互转换的相关资料,需要的朋友可以参考下...2020-06-25
- 很多朋友不清楚如何在Byte[]和String之间进行转换?下面小编给大家带来了byte与string转换的方法,感兴趣的朋友参考下吧...2020-06-25
- 这篇文章主要介绍了C++ 字符串string和整数int的互相转化操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-10
C# 字符串string和内存流MemoryStream及比特数组byte[]之间相互转换
本文主要介绍字符串string和内存流MemoryStream及比特数组byte[]之间相互转换的方法,需要的小伙伴可以参考一下。...2020-06-25- 这篇文章主要给大家介绍了关于C++ string替换指定字符的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C++具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-04-25
Mysql中关于Incorrect string value的解决方案
在对mysql数据库中插入数据的时候,直接插入中文是没有问题的!但是用预编译语句时,用流对数据进行处理总报incorrect string value这个异常。本篇文章教给你解决方法...2021-09-20- String.format无论是在C#中还是在java中应用都非常广泛,今天小编抽个时间把有关string.format知识总结分享给大家,需要的朋友可以参考下...2020-06-25
- 这篇文章主要给大家介绍了关于c#中string的特性介绍及注意事项的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用c#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-06-25
C#中图片.BYTE[]和base64string的转换方法
下面小编就为大家带来一篇C#中图片.BYTE[]和base64string的转换方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25- 这篇文章主要介绍了将java中的 string 类型转成 数组案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-22