php代码记录
公司项目的随想记录也记在这里:
1,证书产生的目的是为了防止不合法的用户能够直接访问接口获取数据。证书由服务器端生成,然后返回给app。然后app拿着这个证书到服务器端获取接口数据,而不是app的合法使用者的用户来访问服务器端接口时,就会收到一个证书错误的提醒,从而从一定程度上保证了服务器端接口的安全性。
一,json语法( php中的json_decode($json)中的$json要符合json语法格式 )
① JSON可以表示三种类型的值
1,简单值。包括整型,字符串型,布尔值和null。例如:5,"hello world",true,null都是有效的JSON数据。其中JSON字符串必须使用双引号(单引号会导致语法错误)。
2,对象。如,{"name":"tony","age":15}。说明①要求属性必须用双引号(不加或者单引号都是错误的)②值可以是简单值(注意若值为字符串,必须用双引号,不能用单引号),也可以是复杂类型的值(对象或数组)。
3,数组。如,[25,true,"tony"]。说明:数组的值也可以是任意类型。
二,php定义对象字面量时,不支持直接书写,如{"a":"11","b":"22"}。这种书写方式在其他语言中被支持,在php中需要按如下方式定义:
① $a = '{"a":"11","b":"22"}' ;【这是json字符串,不加外面的单引号则是json对象】
② $b = json_decode($a);
这样$b就是对象字面量了。
三,上述三种数值类型经过json_encode($value)转化后,会输出json格式(此时类型为字符串),如"hello",{},[]。输出的结果可以在其他地方(javascrip,ios,java,php等等)被解析使用。
四,php中改进后的json_encode()和json_decode()函数,支持汉语(原生的不支持汉语)
注:php中不可直接改写原生函数,需要写在类里,作为类的一个方法
static function json_encode($input) { // 从 PHP 5.4.0 起, 增加了这个选项. if (defined('JSON_UNESCAPED_UNICODE')){ return json_encode($input, JSON_UNESCAPED_UNICODE); } if (is_string($input)) { $text = $input; $text = str_replace('\\', '\\\\', $text); $text = str_replace( array("\r", "\n", "\t", "\""), array('\r', '\n', '\t', '\\"'), $text); return '"' . $text . '"'; } else if (is_array($input) || is_object($input)) { $arr = array(); $is_obj = is_object($input) || (array_keys($input) !== range(0, count($input) - 1)); foreach ($input as $k=>$v) { if ($is_obj) { $arr[] = self::json_encode($k) . ':' . self::json_encode($v); } else { $arr[] = self::json_encode($v); } } if ($is_obj) { return '{' . join(',', $arr) . '}'; } else { return '[' . join(',', $arr) . ']'; } } else { return $input . ''; } }
string
'"aa"' (length=4)
string
'["asd","asdf","ddd"]' (length=20)
string
'{"a":"aa","b":"bb"}' (length=19)
【注】:系统json_encode()函数对于空数组加密成 string '[]',所以array(array())加密成 '[[]]'
自己写的类里,json_encode()函数对于空数组加密成 string '{}',所以array(array())加密成 '[{}]'. 但是注意源代码5.4版本以后就直接返回 return json_encode($input, JSON_UNESCAPED_UNICODE);这个[]是直接变为[]的而不是{}
【新注:】php里的false转化为字符串为空字符串'',true转化为字符串时为字符串'1'。 echo空字符串时没有任何效果。所以对于['a'=>false],加密后变为{"a":} 五,utf8和unicode相互转换函数
/** * utf8字符转换成Unicode字符 * @param [type] $utf8_str Utf-8字符 * @return [type] Unicode字符 */ function utf8_str_to_unicode($utf8_str) { $arr = str_split($utf8_str, 3); $unicode_str = ""; foreach ($arr as $char) { $unicode = 0; $unicode = (ord($char[0]) & 0x1F) << 12; $unicode |= (ord($char[1]) & 0x3F) << 6; $unicode |= (ord($char[2]) & 0x3F); $unicode_str .= "\u".dechex($unicode); } return $unicode_str; } /** * Unicode字符转换成utf8字符 * @param [type] $unicode_str Unicode字符 * @return [type] Utf-8字符 */ function unicode_to_utf8($unicode_str) { $arr = explode('\u', $unicode_str); $utf8_str = ''; foreach ($arr as $item) { if ($item) { $code = intval(hexdec($item)); //这里注意转换出来的code一定得是整形,这样才会正确的按位操作 $ord_1 = decbin(0xe0 | ($code >> 12)); $ord_2 = decbin(0x80 | (($code >> 6) & 0x3f)); $ord_3 = decbin(0x80 | ($code & 0x3f)); $utf8_str .= chr(bindec($ord_1)) . chr(bindec($ord_2)) . chr(bindec($ord_3)); } } return $utf8_str; } var_dump(unicode_to_utf8('\u2605'));
php代码记录的更多相关文章
- MVVM 代码记录
一.XML <Page x:Class="MVVM.MainPage" xmlns="http://schemas.microsoft.com/winfx/20 ...
- Echarts基于动态数据初步使用 及问题 代码记录.
ECHARTS 插件 基本的动态数据展示(横向图) 下载 echarts.commn.min.js文件 在页面中进行引用, 并为Echarts图形准备一个div盒子 <!-- 引入插件 --&g ...
- OpenCV学习代码记录——人脸检测
很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...
- OpenCV学习代码记录—— Snake轮廓
很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...
- OpenCV学习代码记录——Hough线段检测
很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...
- OpenCV学习代码记录——轮廓(contour)检测
很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...
- OpenCV学习代码记录——canny边缘检测
很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...
- JSP标签使用的代码记录——《%= %》(神奇的CSDN为啥标题不让打英文的尖括号)
关于JSP的一些标签,在用到的时候有些生疏,就去找了找资源重新温习了一下. 附上两个JSP<%= %>标签的博客,同时也记录当前项目里用到的方法. jsp页面中<%@ %>.& ...
- Shiro权限验证代码记录,正确找到shiro框架在什么地方做了权限识别
权限验证方式的验证代码: org.apache.shiro.web.servlet.AdviceFilter这个类是所有shiro框架提供的默认权限验证实例类的父类 验证代码: public void ...
- CSS代码记录
1. 内容横向滚动的代码 .ul { display: box; display: -webkit-box; width: 250px; background: yellow; overflow-y: ...
随机推荐
- Django的Rbac介绍1
1.django的权限管理叫做RBAC 我们在百度上查看RBAC的概念如下 基于角色的权限访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的 ...
- mac上为nodejs设置环境变量
Mac下面的环境变量设置和Linux差不多,一般为这几个文件(左边的先加载): /etc/profile /etc/paths ~/.bash_profile ~/.bash_login ~/.pro ...
- Spring Boot 使用465端口发送邮件
2017年10月27日 15:04:24 伊宇紫 阅读数:2710 标签: 465端口邮件springboot 更多 个人分类: Java 版权声明:本文为博主原创文章,未经博主允许不得转载. h ...
- JQuery UI之Autocomplete(1)入门程序
1.Autocomplete的主要属性:source:即为指定智能提示下拉框中的数据来源,支持三种类型. Array,主要用于本地化数据提供,支持两种格式:字符串数组 [ "Choice1 ...
- 四元数运动学笔记(5)IMU驱动的运动误差方程
1.扩展卡尔曼滤波EKF1.1线性化卡尔曼滤波1.2偏差微分方程的推导1.3线性化卡尔曼滤波的流程1.4 离散EKF2.误差状态的运动方程2.1连续时间的IMU系统动态方程2.1.1相关变量2.1.2 ...
- Beanstalkd消息队列的安装与使用
一.Beanstalkd是什么? Beanstalkd是一个高性能,轻量级的分布式内存队列 二.Beanstalkd特性 1.支持优先级(支持任务插队)2.延迟(实现定时任务)3.持久化(定时把内存中 ...
- vuex写法
<template> <div class="hello"> <p>{{count}}</p> <p> <butt ...
- Porsche PIWIS III with V37.250.020 Piwis 3 Software Update New Feature
Porsche Piwis tester 3 PT3G VCI with V37.250.020 Piwis 3 Software unlimited license installed on Ful ...
- JoyOI1935 导弹防御塔
原题链接 首先可以二分答案,然后考虑检验答案. 我们可以对炮塔进行拆点,即能发射\(x\)颗导弹就拆成\(n\times x\)个点,作为一个集合,另一个集合则是\(m\)个侵入者,然后对于能在剩余时 ...
- 循环&信息添加&颜色修改
#import "AViewController.h" @interface AViewController () <UIActionSheetDelegat ...