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 :_)
我是 @程序员小助手 ,持续分享编程知识,欢迎关注。
phpurldecode怎么用?
urlencode()编码:对字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。urldecode()解码:还原 URL 编码字符串。示例:
urlencode演示
点击连接后地址栏中汉字被编码了:http://localhost/decode.php?par=%E6%BC%94%E7%A4%BAphp-mysql------------------------------------------------------------------------//decode.php如何去学习php加数据库?
不积跬步无以至千里,别想着急功近利就能学会,结果只会在开发中遇到问题都知道怎么解决。
学习php和mysql百度一下视频、电子书、开源项目,框架都很多了。随便找个教程坚持下去也能学会,但总得来说有以下学习过程吧。
1.学习php的基础知识,变量,字符串操作,数组操作,对象操作,文件操作,session和cookie操作,参数接收$_GET,$_POST,$_REQUEST,$_SERVER请求信息,数据库操作pdo,搞清楚客户端一个请求到服务器返回数据的过程等,就这些简单知识点你就可以搞简单网站一些接口了
2.当前面的都懂了,就可以学习高级点,如:异常处理,反射Reflection,GD库操作(生成验证码,图片水印旋转裁剪等图像操作),phar打包,socket通信,多进程pcntl和posix扩展对进程操作,进程间通信(共享内存sysvshm,shmop,消息队列sysvmsg,信号量sysvsem,信号,socket),如何实现mysql进程池,还有很重要的一个libevent,一个高性能事件通知网络库,很容易实现epoll异步非阻塞模型,可以实现高性能服务器
3.当上面的都了解了,就应该去了解php底层。了解phh底层sapi,zend引擎执行,如何生成opcache,zend虚拟机,gc机制等
而mysql的话首先了解sql语句增删改查,加上各种函数的sql怎么写,各种数据类型tinyint,smallint,int,bigint,float,varcar,char,datetime,time,timestamp,decimal等类型的区别长度等。
然后了解myisam,innodb引擎区别,innodb事务隔离级别之类,mysql索引优化,分库分表,mysql主从复制,mysql集群等。
然后仅仅懂php+mysql是不够的,基本上项目后台是自己搞,必须了解前端技术js+html+css,了解jquery、vue双向绑定等前端框架,也可以了解前端ui框架bootstrap,Element-ui等。还有项目一般部署在linux,起码要了解linux的基础命令,如:rm -rf /而网站发展起来了,你肯定要懂缓存memcache、redis,了解redis的各种类型string,hash,list,set,zset,HyperLogLog,geohash等,发布订阅,持久化AOF和RDB, 缓存穿透缓存雪崩等高并发时缓存可能出现的问题。然后项目再大点,就要懂LVS,HAProxy,nginx等负载均衡,然后redis要分布式部署,怎样通过keepalived+Twemproxy实现redis高可用,如何实现高性能,高可用,高并发,服务器多机房容灾,隔离,限流,降级等架构知识
好吧,说了一大堆,我也不是很懂...
php截取字符串内容从文本中提取所有的文件路径?
preg_match_all("/[C-Z]{1}:\\\(.*)\.(doc|ppt)/i",$str,$match);匹配结果在$match[0]中,$str表示你这个文本的字符串,你可以通过修改[C-Z]限制盘符,修改(doc|ppt)增加后缀
abs是PHP字符串函数吗?
是的。abs是PHP字符串函数。
abs函数用于返回指定参数的绝对值,如果参数是float类型,则返回的类型也是float,否则返回Integer类型。
返回参数的绝对值,如果参数是float,则返回的类型也是float,如果参数是int,返回类型是int,如果参数是string字符串,则返回0。