php字符串参数怎么设置,PHP如何判断字符串是否标准JSON?
引言
在MYSQL 5.6及以下没有 JSON 这个字段类型的时候,我们还只能用字符串存储数组,对象,这些结构数据;甚至有直接将序列化的对象存库的,都是无奈之举。
编程中也时不时对接口进行json_encode / json_decode。那么如果所得的字符串不是标准的格式,有什么办法快速检测吗?
本文就来说一说。
学习时间最快的办法,还是使用PHP内置的 json_decode 函数,对于此函数的参数和返回值,我们需要认真地分析。
该函数接受一个 JSON 编码的字符串并且把它转换为 PHP 变量。函数结构:
mixed json_decode( string $json[, bool $assoc = false[, int $depth = 512[, int $options = 0]]] )
除了第一个字符串类型的$json必填之外,其他都是选填。如果我们定制功能,需要后面的参数也指定。比如,解码的字符串解析为关联数组,那么就指定 $assoc = true。
考虑到兼容性的要求,$json 传入的字符串,必须是 UTF-8 编码格式。
我们试着编写一个助手函数,用于判断字符串是否标准的json格式:
function isJson($string) { json_decode($string); return (json_last_error() == JSON_ERROR_NONE); }
这个方法使用了2个函数,和1个常量。其中 json_decode 是对字符串解码暂且不说。json_last_error 函数,如果有返回值,则是 JSON 编码解码时最后发生的错误。
JSON_ERROR_NONE 是无错误,=0。该句判断没有错误则是标准格式,返回 true;否则返回 false。
深入学习其实上面的代码对于 json 加解码过程中的错误判断还是比较粗糙的。有一位小哥不嫌繁琐,手动拼装了详细的错误处理函数,非常实用。
使用上述函数进行测试:
$json = '[{"user_id":13,"username":"stack"},{"user_id":14,"username":"over"}]'; $output = json_validate($json); print_r($output);
输出内容如下:
这是正常的情况,json 格式完全正确。我们再测试一个不是规范格式的字符串。
$json = '{background-color:yellow;color:#000;padding:10px;width:650px;}'; $output = json_validate($json); print_r($output);
输出错误信息:
Syntax error, malformed JSON.
万能的正则跟字符串打交道,正则表达式几乎可以做一切你想要的结果。json 字符串也一样,据文档所说,使用正则表达式判断JSON格式,稳定有效,而且速度还很快。
下面这个正则表达式您拿小本本记好了,一模一样地抄下来用就可以了。
return !preg_match('/[^,:{}\\[\\]0-9.\\-+Eaeflnr-u \\n\\r\\t]/', preg_replace('/"(\\.|[^"\\\\])*"/', '', $json_string));
写在最后如果考虑程序的可读性,和可维护性,使用 json_decode 函数的判断无疑更直观,大家也更熟悉。然而正则表达式所体现出的高效也是不容小觑的。
Happy coding :_)
我是 @程序员小助手 ,持续分享编程知识,欢迎关注。
声明字符串数据类型哪个执行效率高?
您好,使用单引号''执行效率高
php中系统有最大值函数吗?
php中使用max()函数来求最大值,可以求一个数组中所有元素的最大值,也可以求一串数字的最大值。
max()函数有两种用法来求最大值。
1、求数组的中最大值元素。
max($arr),求$arr数组元素中的最大值。这种情况下,只能有一个参数,且必须是数组。
2、求多个数字中的最值。
max(x,y,z,z1,z2,z3...);
这种情况下,必须有两个参数。一般来说,参数都必须是数字。如果真的出现了string类型的参数,max()函数会把它当作0来处理。再如果有多个string类型的数组,且0是所有数字中的最大值,那么将返回按字母排序最小的string参数。
云服务器环境要怎么配置?
配置云主机环境,首先要看系统是什么系统,Windows Server系统和Linux系统配置环境方法不同。
Centos Linux系统环境配置1、可选择手动自行使用命令安装系统环境(复杂,不适合新手)或者采用安装宝塔面板Linux面板(个人推荐)来进行环境配置(方便快捷,操作简单,根据自己所需安装相应环境)
2、关于Linux宝塔面板安装教程,我主页有专门写的一篇文章,请根据步骤安装,这里就不细说。
3、根据自己所需安装相应的系统所需环境软件
4、创建网站
5、面板也可以一键部署环境和网站
6、至此linux系统环境配置完成
Windows Server系统环境配置1、在系统内找到IIS快捷方式并打开
2、右键点击网站图标—>根据提示选择新建—>网站
3、输入网址描述中填写网站描述后单击下一步
4、在主机头位置填写域名、网址相关信息
5、选择网站存放路径,并勾选允许匿名访问网站
6、根据实际应用设置网站访问权限
7、进一步对网站属性设置
一、右键新建网站、选择属性选项:
二、设置网站标识,可以为您的网站增加多个域名绑定,如图:选择“高级”,点击添加:输入IP,输入要绑定的域名,点击确定:
三、设置网站“主目录”选项,执行权限选择“纯脚本”:
四、应用程序配置:点击“配置”选项,进入应用程序配置选择“选项”菜单,选择“启用父路径”,点击确定,完成:
五、网站稳定设置:把网站默认首页文档添加上,并上移只最顶端,点击确定,完成:
8、至此Windows Server系统配置环境完成
encoding函数的使用方法?
encoding 函数 为php内部多字节字符串编码转换函数,可以在有需要的场合进行编码转换,如:解决 在GB2312编码环境下使用Ajax产生的中文 字符乱码 问题。支持几乎所有编码,版本支持 PHP 4 >= 4.0.6、PHP 5。
函数原型:
/**
* 多字节字符串编码转换函数
*
* @param string str 需要进行编码转换的字符串
* @param string to_encoding 指定转换为某种编码,如:gb2312、gbk、utf-8等
* @param mixed from_encoding 混合指定原来字串的编码,如:同时指定 JIS, eucjp-win, sjis-win 混合编码
* @return string
string mb_convert_encoding ( string str, string to_encoding [, mixed from_encoding] )