PHP数组转字符串写入数据库的方法
最简单的办法
转换implode
代码如下 | 复制代码 |
数组->字符 字符->数组 |
使用php的serialize函数。
例子:
代码如下 | 复制代码 |
$data = array('上海', '北京', '武汉'); |
如何再将从数据库中取出的数组字符串,转换成数组呢?用unserialize函数:
代码如下 | 复制代码 |
$data = unserialize($data); echo $data; |
当然这样我们还可以直接写入到文件中
serialize和反序列unserialize来实现。
代码如下 | 复制代码 |
<?php |
例子
使用期php的eval函数
string2array,array2string PHP数组转字符串写入数据库,字符串数组转可执行
代码如下 | 复制代码 |
/** |
前段时间说自己遇到了个《URL加号引发错误》的BUG,引起这个bug的原因就是自己在URL中使用了 urlencode 函数,该函数会把空格转换成加号,这样就导致URL解析出错,而空格只有转换成 %20 才可以可以正常解析,这时我们就需要使用 rawurlencode 函数。下面就介绍一下 urlencode 函数与 rawurlencode 函数的区别:
urlencode 函数:
返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与 RFC1738 编码(参见 rawurlencode())不同。
rawurlencode 函数:
返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数。这是在 » RFC 3986 中描述的编码,是为了保护原义字符以免其被解释为特殊的 URL 定界符,同时保护 URL 格式以免其被传输媒体(像一些邮件系统)使用字符转换时弄乱。下面我们来看一下例子:
代码如下 | 复制代码 |
<?php $string = "hello world"; echo urlencode($string) . '<br/>'; //输出:hello+world ?> |
具体例子比较:
代码如下 | 复制代码 |
<?php $asscii = pack("H*",$str); exit; 输出结果: |
---------------------------------------------------------------------------------
比较二者的结果:
1. 数字、大小写字母都不编码
2. 减号、点号、下划线 三个不编码
3. rawurlencode比urlencode多编码一个”加号“
关于JavaScript中escape与encodeURIComponent的区别:
代码如下 | 复制代码 |
>>> console.log(encodeURIComponent("统一注册1")); %E7%BB%9F%E4%B8%80%E6%B3%A8%E5%86%8C1 <?php 输出结果: |
结果说明:
1. encodeURIComponent 总是把输入转换成utf8编码处理的,按字节编码
2. escape是按照unicode编码处理的,因为它也对url中不安全的字符做了编码,所以也可以在url中做编码使用,但是,服务器端不会自动解码,下面提供一个PHP版的解码函数,是用手册里找的:
<?php
代码如下 | 复制代码 |
function unescape($str) { ?>
>>> console.log(escape(" !\"#$%&'()*+,-./0123456789:;=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz{|}~")); *+-./0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz |
结果比较:
escape未编码的字符: *+-./@_ 共7个
encodeURIComponent未编码的字符: !’()*-._~ 共9个
先用php获取本机的ip,再用php的curl函数来获取用户的详细地区.下面来看一下代码;
代码如下 | 复制代码 |
*/ |
方法一,利用QQWry.Dat IP库,我们只胖乎乎
用简单的办法。
使用示例
示例一:
代码如下 | 复制代码 |
$IpLocation = new IpLocation(); |
示例二:
代码如下 | 复制代码 |
$IpLocation = new IpLocation('../qqwry/QQWry.Dat'); |
具体的IP库与Iplocation类文件这里不介绍了大家百度搜索吧。
方法二,利用api接口
示例一,
代码如下 | 复制代码 |
/** $url = "http://ip168.com/ip/?ip=".$ip; |
示例二,
下面这个函数是用php的curl函数从网路上获取详细地区
代码如下 | 复制代码 |
function lazdf($ip){ $curl= curl_init(); curl_setopt($curl,CURLOPT_URL,"http://www.ip138.com/ips138.asp?ip=".$ip); return "<div class="global_widht global_zj zj" style="background: none repeat scroll 0% 0% rgb(226, 255, 191); font-size: 12px; color: rgb(85, 85, 85); height: 30px; line-height: 30px; border-bottom: 1px solid rgb(204, 204, 204); text-align: left;"> 欢迎来自 <b>".$ipp[1]."</b> 的朋友!</div>"; } echo lazdf(GetIP());//输出ip |
欢迎来自长沙地区的朋友
文章先是给各位普及一下关于cookie与session的两个例子,然后再以利用cookie自动登录为例子给大家介绍了它们之间的关系及后面总结了区别,希望此文章对你理解cookie与session会有所帮助。session的使用:
session_start();定义$_SESSION数组变量。
session_start()使用前,不能有任何形式的输出,包括php中的输出和html代码。
$_SESSION数组不可以使用数值下标,只可以使用字符串下标。
php.ini中的session_save_path配置项决定了session的保存位置。
默认情况下,session是保存在文件中。我们可以使用session_set_save_handler()函数来重写session机制。
设置有效时间
代码如下 | 复制代码 |
SESSION: ini_set('session.gc_maxlifetime',24*3600);//session保存一天 session_start(); $_SESSION[‘web_name’]='网易'; |
说明:好像默认是时间是:20-24分钟,但是关闭浏览器session就自动消失了!
删除session:
删除某个元素 unset($_SESSION[key]);
删除所有session $_SESSION=array();
删除保存session数据的文件 session_destroy();
session_distroy()方法只是删除了服务器端的session文件,并不会释放内存中的$_SESSION变量,如果我们在session_distroy()后,立即var_dump($_SESSION),仍然可以看到session输出。因此如果想完全的释放session,必须配合使用$_SESSION=array()。
cookie的使用:
设置cookie:setcookie(变量名,变量值,生存时间(时间戳))。
删除cookie:setcookie(变量名,值,time()-1)。原理:设置cookie的生存时间过期。
读取cookie:$_COOKIE[变量名]。
$path="/"; //设置cookie存放的路径;1.默认存放是本目录,只有本目录下才能访问,2.“/”表示存放在根目录,3.“/foo/”只有foo文件夹下面文件才能访问
代码如下 | 复制代码 |
|
注意:cookie存放的值只能是string类型的,但是要存放数值怎么解决呢!
存储:
代码如下 | 复制代码 |
$array=array('a','b'); |
读取:
代码如下 | 复制代码 |
//恢复serialize对象 $other = StripSlashes($_COOKIE['snsresult']);//必须执行这步 |
注意:setcookie在代码中存取值时前面是不可以输出任何内容的,空行也不可以,不然cookie是没有值的。
1、$_COOKIE只可以读取cookie的值,并不能对cookie进行设置。
2、在使用setcookie之前,不能有任何类型的输出。
3、在脚本第一次设置cookie后,是不能在当前脚本使用$_COOKIE获取到的。需刷新页面或者在其他脚本中获取。
自动登录
代码如下 | 复制代码 |
//检查用户是否登录
|
两者的联系与区别:
联系:
两者都被成为会话技术,用于解决http的无状态性。
sessionID是保存在cookie中的。默认情况下,session是依赖cookie的,如果浏览器端完全禁用了cookie,那么session也就不能用了。但是我们有其他的方法可以让session继续有用。比如url重写,将sessionID放在url中;给表单增加隐藏域,讲sessionID存放在隐藏域中,发送至浏览器。
区别:
cookie保存早浏览器端,每次访问服务器的时候,都会讲cookie带过去,保证让服务器知道两次请求来自于同一个客户端。安全性较低。
session保存在服务器,每次请求都会通过cookie带来的sessionID去服务器匹配。安全性较高。
session的有效期从session_start()开始,到浏览器关闭结束。
cookie可以设定有效期。默认为浏览器关闭cookie就失效,sessionID丢失,即使服务器端的session文件还在,也不会被找到。
正则表达试是我们在开发验证时会常用到的一些规则,下面我整理了在我们用户数据提交时的一些常用的正则表达式,希望这些整理数据对你有帮助。正则表达式一直以来是我比较头痛的东西,不过工作中是离不开正则表达式的,代码、vim编辑器、awk等Linux命令都广泛应用正则表达式。这是我收集并且测试过的PHP代码中常用的正则表达式,首先建立测试函数:
代码如下 | 复制代码 |
function regTest( $pattern, $str ) { |
1. 匹配中文字符
代码如下 | 复制代码 |
$pattern = "/[x{4e00}-x{9fa5}]/u"; |
关于汉字的匹配,网上很多给的都是“[u4e00-u9fa5]”,这个正则不一定完全正确。
2. 匹配tab缩进、空格和换行
代码如下 | 复制代码 |
$pattern = "/[x{4e00}-x{9fa5}]/u"; |
3. 匹配Email地址
代码如下 | 复制代码 |
$pattern = "[w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*]"; $str = '如有问题,请联系service@lenovo.com或者contact@ibm.com。'; regTest( $pattern, $str ); //依次输出结果 //int(1) //array(4) { [0]=> array(2) { [0]=> string(18) "service@lenovo.com" [1]=> string(15) "contact@ibm.com" } [1]=> array(2) { [0]=> string(0) "" [1]=> string(0) "" } [2]=> array(2) { [0]=> string(0) "" [1]=> string(0) "" } [3]=> array(2) { [0]=> string(0) "" [1]=> string(0) "" } } //string(41) "如有问题,请联系Test或者Test。" |
//使用Filter函数
filter_var($email, FILTER_VALIDATE_EMAIL);
我一般不自己写正则表达式去验证邮箱,使用PHP内置filter函数可以很方便的完成邮箱地址的验证。
4. 匹配国内手机号码和电话号码
代码如下 | 复制代码 |
//固定电话匹配 $pattern = "[d{3,4}-d{7,8}]"; $str = '联系电话010-12345678'; regTest( $pattern, $str ); //最简单的匹配手机号匹配 $pattern = "[1d{10}]"; $str = '联系电话15812345678'; regTest( $pattern, $str ); |
5. 匹配HTML中的图片地址
代码如下 | 复制代码 |
$pattern = '/<[img|IMG].*?src=['|"](.*?(?:[.gif|.jpg]))['|"].*?[/]?>/'; $str = '<img id="test_img" src="images/123.gif" alt="test" />'; regTest( $pattern, $str );
/** /** |
补充
表单验证匹配
验证账号,字母开头,允许 5-16 字节,允许字母数字下划线:^[a-zA-Z][a-zA-Z0-9_]{4,15}$
验证账号,不能为空,不能有空格,只能是英文字母:^S+[a-z A-Z]$
验证账号,不能有空格,不能非数字:^d+$
验证用户密码,以字母开头,长度在 6-18 之间:^[a-zA-Z]w{5,17}$
验证是否含有 ^%&',;=?$ 等字符:[^%&',;=?$x22]+
匹配Email地址:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
匹配腾讯QQ号:[1-9][0-9]{4,}
匹配日期,只能是 2004-10-22 格式:^d{4}-d{1,2}-d{1,2}$
匹配国内电话号码:^d{3}-d{8}|d{4}-d{7,8}$
评注:匹配形式如 010-12345678 或 0571-12345678 或 0831-1234567
匹配中国邮政编码:^[1-9]d{5}(?!d)$
匹配身份证:d{14}(d{4}|(d{3}[xX])|d{1})
评注:中国的身份证为 15 位或 18 位
不能为空且二十字节以上:^[s|S]{20,}$
相关文章
- 在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
- 操作类就是把一些常用的一系列的数据库或相关操作写在一个类中,这样调用时我们只要调用类文件,如果要执行相关操作就直接调用类文件中的方法函数就可以实现了,下面整理了...2016-11-25
- 这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
- 本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
- 这篇文章介绍了C#判断字符串是否数字或字母的实例,有需要的朋友可以参考一下...2020-06-25
- 这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
- 这篇文章主要介绍了PostgreSQL判断字符串是否包含目标字符串的多种方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-23
- 这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
- 这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
- 这篇文章主要介绍了Intellij IDEA连接Navicat数据库的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借价值,需要的朋友可以参考下...2021-03-25
- 在开发过程中,我们经常会将日期时间的毫秒数存放到数据库,但是它对应的时间看起来就十分不方便,我们可以使用一些函数将毫秒转换成date格式。 一、 在MySQL中,有内置的函数from_unixtime()来做相应的转换,使用如下: 复制...2014-05-31
- 本文章提供在量的数据中级操作实例有如对键名比较计算数组的差集 计算差集 给指定数组中插入一个元素 反转数组 交集赋值新的数组实例。 //定义回调函数 funct...2016-11-25
- C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
- 这篇文章主要介绍了C#二维数组基本用法,以实例形式分析了C#中二维数组的定义、初始化、遍历及打印等用法,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 本文实例讲述了php字符串按照单词进行反转的方法。分享给大家供大家参考。具体分析如下:下面的php代码可以将字符串按照单词进行反转输出,实际上是现将字符串按照空格分隔到数组,然后对数组进行反转输出。...2015-03-15
- 下面一段代码给大家介绍php curl模拟post请求的示例代码,具体代码如下: <?php$uri = "http://www.cnblogs.com/test.php";//这里换成自己的服务器的地址// 参数数组$data = array ( 'name' => 'tanteng'// 'passwor...2015-11-24
- 通过内网连另外一台机器的mysql服务, 确发现速度N慢! 等了大约几十秒才等到提示输入密码。 但是ping mysql所在服务器却很快! 想到很久之前有过类似的经验, telnet等一些服务在连接请求的时候,会做一些反向域名解析(如果...2015-10-21
- Array数组在C#中同样是最基本的数据结构,下面为大家C#数组的常用操作方法小结,皆为细小的代码段,欢迎收看收藏...2020-06-25
- 某些时候,例如为了搭建一个测试环境,或者克隆一个网站,需要复制一个已存在的mysql数据库。使用以下方法,可以非常简单地实现。假设已经存在的数据库名字叫db1,想要复制一份,命名为newdb。步骤如下:1. 首先创建新的数据库newd...2015-10-21
- mysqldump命令的用法1、导出所有库系统命令行mysqldump -uusername -ppassword --all-databases > all.sql 2、导入所有库mysql命令行mysql>source all.sql; 3、导出某些库系统命令行mysqldump -uusername -ppassword...2015-10-21