7、PHP JSON 格式

json_encode ( mixed $value [, int $options = 0 [, int $depth = 512 ]] )

返回字符串,包含了 value 值 JSON 形式的表示。

编码受传入的 options 参数影响,此外浮点值的编码依赖于 serialize_precision

参数

value

待编码的 value ,除了resource 类型之外,可以为任何数据类型。

所有字符串数据的编码必须是 UTF-8。

options

由以下常量组成的二进制掩码: JSON_HEX_QUOTJSON_HEX_TAGJSON_HEX_AMPJSON_HEX_APOSJSON_NUMERIC_CHECK,JSON_PRETTY_PRINTJSON_UNESCAPED_SLASHESJSON_FORCE_OBJECTJSON_PRESERVE_ZERO_FRACTIONJSON_UNESCAPED_UNICODE,JSON_PARTIAL_OUTPUT_ON_ERROR。 关于 JSON 常量详情参考JSON 常量

以下常量表示了 json_last_error() 所返回的错误类型。

JSON_ERROR_NONE (integer)
没有错误发生。自 PHP 5.3.0 起生效。
JSON_ERROR_DEPTH (integer)
到达了最大堆栈深度。自 PHP 5.3.0 起生效。
JSON_ERROR_STATE_MISMATCH (integer)
出现了下溢(underflow)或者模式不匹配。自 PHP 5.3.0 起生效。
JSON_ERROR_CTRL_CHAR (integer)
控制字符错误,可能是编码不对。自 PHP 5.3.0 起生效。
JSON_ERROR_SYNTAX (integer)
语法错误。 自 PHP 5.3.0 起生效。
JSON_ERROR_UTF8 (integer)
异常的 UTF-8 字符,也许是因为不正确的编码。 自 PHP 5.3.3 起生效。
JSON_ERROR_RECURSION (integer)
The object or array passed to json_encode() include recursive references and cannot be encoded. If theJSON_PARTIAL_OUTPUT_ON_ERROR option was given, NULL will be encoded in the place of the recursive reference. Available since PHP 5.5.0.
JSON_ERROR_INF_OR_NAN (integer)
The value passed to json_encode() includes either NAN or INF. If the JSON_PARTIAL_OUTPUT_ON_ERROR option was given, 0 will be encoded in the place of these special numbers. Available since PHP 5.5.0.
JSON_ERROR_UNSUPPORTED_TYPE (integer)
A value of an unsupported type was given to json_encode(), such as a resource. If the JSON_PARTIAL_OUTPUT_ON_ERROR option was given, NULL will be encoded in the place of the unsupported value. Available since PHP 5.5.0.
JSON_ERROR_INVALID_PROPERTY_NAME (integer)
A key starting with \u0000 character was in the string passed to json_decode() when decoding a JSON object into a PHP object. Available since PHP 7.0.0.
JSON_ERROR_UTF16 (integer)
Single unpaired UTF-16 surrogate in unicode escape contained in the JSON string passed to json_encode(). Available since PHP 7.0.0.
下面的常量可以和 json_decode() 的 form 选项结合使用。 JSON_BIGINT_AS_STRING (integer)
将大数字编码成原始字符原来的值。 自 PHP 5.4.0 起生效。
JSON_OBJECT_AS_ARRAY (integer)
Decodes JSON objects as PHP array. This option can be added automatically by calling json_decode() with the second parameter equal to TRUE. Available since PHP 5.4.0.
下面的常量可以和 json_encode() 的 form 选项结合使用。 JSON_HEX_TAG (integer)
所有的 < 和 > 转换成 \u003C 和 \u003E。 自 PHP 5.3.0 起生效。
JSON_HEX_AMP (integer)
所有的 & 转换成 \u0026。 自 PHP 5.3.0 起生效。
JSON_HEX_APOS (integer)
所有的 ' 转换成 \u0027。 自 PHP 5.3.0 起生效。
JSON_HEX_QUOT (integer)
所有的 " 转换成 \u0022。 自 PHP 5.3.0 起生效。
JSON_FORCE_OBJECT (integer)
使一个非关联数组输出一个类(Object)而非数组。 在数组为空而接受者需要一个类(Object)的时候尤其有用。 自 PHP 5.3.0 起生效。
JSON_NUMERIC_CHECK (integer)
将所有数字字符串编码成数字(numbers)。 自 PHP 5.3.3 起生效。
JSON_PRETTY_PRINT (integer)
用空白字符格式化返回的数据。 自 PHP 5.4.0 起生效。
JSON_UNESCAPED_SLASHES (integer)
不要编码 /。 自 PHP 5.4.0 起生效。
JSON_UNESCAPED_UNICODE (integer)
以字面编码多字节 Unicode 字符(默认是编码成 \uXXXX)。 自 PHP 5.4.0 起生效。
JSON_PARTIAL_OUTPUT_ON_ERROR (integer)
Substitute some unencodable values instead of failing. Available since PHP 5.5.0.
JSON_PRESERVE_ZERO_FRACTION (integer)
Ensures that float values are always encoded as a float value. Available since PHP 5.6.6.
JSON_UNESCAPED_LINE_TERMINATORS (integer)
The line terminators are kept unescaped when JSON_UNESCAPED_UNICODE is supplied. It uses the same behaviour as it was before PHP 7.1 without this constant. Available since PHP 7.1.0.

depth

设置最大深度。 必须大于0。

返回值

成功则返回 JSON 编码的 string 或者在失败时返回 FALSE 。

json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )

接受一个 JSON 编码的字符串并且把它转换为 PHP 变量。

参数

json

待解码的 json string 格式的字符串。

这个函数仅能处理 UTF-8 编码的数据。

assoc

当该参数为 TRUE 时,将返回 array 而非 object 。

depth

指定递归深度。

options

JSON解码的掩码选项。 现在有两个支持的选项。 第一个是JSON_BIGINT_AS_STRING, 用于将大整数转为字符串而非默认的float类型。第二个是 JSON_OBJECT_AS_ARRAY, 与将assoc设置为 TRUE 有相同的效果。

#EXAMPLE

<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; $json_de_obj = json_decode($json);
$json_de_array = json_decode($json, true);
var_dump($json_de_obj);
var_dump($json_de_array); $json_en_obj = json_encode($json_de_obj);
$json_en_array = json_encode($json_de_array);
var_dump($json_en_obj );
var_dump($json_en_array ); ?> 输出结果:
object(stdClass)[10]
public 'a' => int 1
public 'b' => int 2
public 'c' => int 3
public 'd' => int 4
public 'e' => int 5 array (size=5)
'a' => int 1
'b' => int 2
'c' => int 3
'd' => int 4
'e' => int 5
string '{"a":1,"b":2,"c":3,"d":4,"e":5}' (length=31)
string '{"a":1,"b":2,"c":3,"d":4,"e":5}' (length=31)

8、PHP 加密解密函数

(mcrypt7.1开始扩展被废弃,OpenSSL扩展代替)

加密函数:

单向加密函数:

md5(string,raw);

参数 描述
string 必需。规定要计算的字符串。
raw

可选。规定十六进制或二进制输出格式:

  • TRUE - 原始 16 字符二进制格式
  • FALSE - 默认。32 字符十六进制数

crypt(string, salt)

返回使用 DES、Blowfish 或 MD5 算法加密的字符串。

在不同的操作系统上,该函数的行为不同,某些操作系统支持一种以上的算法类型。在安装时,PHP 会检查什么算法可用以及使用什么算法。

具体的算法依赖于 salt 参数的格式和长度。通过增加由使用特定加密方法的特定字符串所生成的字符串数量,salt 可以使加密更安全。

这里有一些和 crypt() 函数一起使用的常量。这些常量值是在安装时由 PHP 设置的。

常量:

[CRYPT_SALT_LENGTH] 默认的加密长度。使用标准的 DES 加密,长度为 2
[CRYPT_STD_DES] 基于标准 DES 算法的散列使用 "./0-9A-Za-z" 字符中的两个字符作为盐值。在盐值中使用非法的字符将导致 crypt() 失败。
[CRYPT_EXT_DES]

扩展的基于 DES 算法的散列。其盐值为 9 个字符的字符串,由 1 个下划线后面跟着 4 字节循环次数和 4 字节盐值组成。它们被编码成可打印字符,每个字符 6 位,有效位最少的优先。0 到 63 被编码为 "./0-9A-Za-z"。在盐值中使用非法的字符将导致 crypt() 失败。

[CRYPT_MD5] MD5 散列使用一个以 $1$ 开始的 12 字符的字符串盐值。
[CRYPT_BLOWFISH] Blowfish 算法使用如下盐值:“$2a$”,一个两位 cost 参数,“$” 以及 64 位由 “./0-9A-Za-z” 中的字符组合而成的字符串。在盐值中使用此范围之外的字符将导致 crypt() 返回一个空字符串。两位 cost 参数是循环次数以 2 为底的对数,它的范围是 04-31,超出这个范围将导致 crypt() 失败。
CRYPT_SHA256 SHA-256 算法使用一个以 $5$ 开头的 16 字符字符串盐值进行散列。如果盐值字符串以 “rounds=<N>$” 开头,N 的数字值将被用来指定散列循环的执行次数,这点很像 Blowfish 算法的 cost 参数。默认的循环次数是 5000,最小是 1000,最大是 999,999,999。超出这个范围的 N 将会被转换为最接近的值。
CRYPT_SHA512 SHA-512 算法使用一个以 $6$ 开头的 16 字符字符串盐值进行散列。如果盐值字符串以 “rounds=<N>$” 开头,N 的数字值将被用来指定散列循环的执行次数,这点很像 Blowfish 算法的 cost 参数。默认的循环次数是 5000,最小是 1000,最大是 999,999,999。超出这个范围的 N 将会被转换为最接近的值。

在该函数支持多种算法的系统上,如果支持上述常量则设置为 "1",否则设置为 "0"。

password_hash(string $password , int $algo [, array $options ])  是crypt()的一个简单封装,并且完全与现有的密码哈希兼容.推荐使用该函数来进行单向加密。

盐值(salt)选项从 PHP 7.0.0 开始被废弃(deprecated)了。 现在最好选择简单的使用默认产生的盐值。

当前支持的算法:

  • PASSWORD_DEFAULT - 使用 bcrypt 算法 (PHP 5.5.0 默认)。 注意,该常量会随着 PHP 加入更新更高强度的算法而改变。 所以,使用此常量生成结果的长度将在未来有变化。 因此,数据库里储存结果的列可超过60个字符(最好是255个字符)。
  • PASSWORD_BCRYPT - 使用 CRYPT_BLOWFISH 算法创建散列。 这会产生兼容使用 "$2y$" 的 crypt()。 结果将会是 60 个字符的字符串, 或者在失败时返回 FALSE
  • PASSWORD_ARGON2I - 使用 Argon2 散列算法创建散列。

PASSWORD_BCRYPT 支持的选项:

  • salt(string) - 手动提供散列密码的盐值(salt)。这将避免自动生成盐值(salt)。

    省略此值后,password_hash() 会为每个密码散列自动生成随机的盐值。这种操作是有意的模式。

    Warning

    盐值(salt)选项从 PHP 7.0.0 开始被废弃(deprecated)了。 现在最好选择简单的使用默认产生的盐值。

  • cost (integer) - 代表算法使用的 cost。crypt() 页面上有 cost 值的例子。

    省略时,默认值是 10。 这个 cost 是个不错的底线,但也许可以根据自己硬件的情况,加大这个值。

PASSWORD_ARGON2I 支持的选项:

  • memory_cost (integer) - 计算 Argon2 散列时的最大内存(单位:字节 byte)。默认值: PASSWORD_ARGON2_DEFAULT_MEMORY_COST

  • time_cost (integer) - 计算 Argon2 散列时最多的时间。默认值: PASSWORD_ARGON2_DEFAULT_TIME_COST

  • threads (integer) - 计算 Argon2 散列时最多的线程数。默认值: PASSWORD_ARGON2_DEFAULT_THREADS

可解密的加密函数:

mcrypt_encrypt(string $cipher , string $key , string $data , string $mode [, string $iv ] )

参数

cipher

MCRYPT_ciphername 常量中的一个,或者是字符串值的算法名称。

key

加密密钥。 如果密钥长度不是该算法所能够支持的有效长度,则函数将会发出警告并返回 FALSE

data

使用给定的 cipher 和 mode 加密的数据。 如果数据长度不是 n*分组大小,则在其后使用 '\0' 补齐。

返回的密文长度可能比 data 更大。

mode

MCRYPT_MODE_modename 常量中的一个,或以下字符串中的一个:"ecb","cbc","cfb","ofb","nofb" 和 "stream"。

iv

Used for the initialization in CBC, CFB, OFB modes, and in some algorithms in STREAM mode. If the provided IV size is not supported by the chaining mode or no IV was provided, but the chaining mode requires one, the function will emit a warning and return FALSE.

PHP5.6开始不再接受无效长度的 key and iv 参数。 如果参数长度无效,则 mcrypt_decrypt() 函数会产生警告并且返回 FALSE。 之前版本中,对于长度不足的密钥和初始向量会在其后补齐 '\0' 使其达到有效长度。

openssl_encrypt(string $data , string $method , string $key [, int $options = 0 [, string $iv = "" [, string&$tag = NULL [, string $aad = "" [, int $tag_length = 16 ]]]]] )

以指定的方式和 key 加密数据,返回原始或 base64 编码后的字符串。

参数

data

待加密的明文信息数据。

method

密码学方式。openssl_get_cipher_methods() 可获取有效密码方式列表。

key

key。

options

options 是以下标记的按位或: OPENSSL_RAW_DATA 、 OPENSSL_ZERO_PADDING

iv

非 NULL 的初始化向量。

tag

使用 AEAD 密码模式(GCM 或 CCM)时传引用的验证标签。

aad

附加的验证数据。

tag_length

验证 tag 的长度。GCM 模式时,它的范围是 4 到 16。

返回值

成功时返回加密后的字符串, 或者在失败时返回 FALSE

错误/异常

method 传入未知算法时,产生 E_WARNING 级别的错误。

iv 传入空字符串时产生 E_WARNING 级别的错误。

解密函数:

mcrypt_decrypt()

openssl_decrypt()

编码转换

base64_encode(string)        base64编码

base64_decode(string)        base64解码

urlencode(string)        URL编码

urldecode(string)        URL解码

convert_uuencode()        使用 uuencode 算法对字符串进行编码。把所有字符串(包括二进制)编码为可打印的字符,以确保其数据库存储及网络传输数据的安全。【uuencoded 数据比原数据大约增大 35%。】

convert_uudecode()        对 uuencode 编码的字符串进行解码。

htmlentities()        把字符转换为 HTML 实体。

html_entity_decode()         把 HTML 实体转换为字符。

htmlspecialchars()         把预定义的字符转换为 HTML 实体。

htmlspecialchars_decode()         把预定义的 HTML 实体转换为字符。

预定义的字符是:

  • & (和号)成为 &
  • " (双引号)成为 "
  • ' (单引号)成为 '
  • < (小于)成为 <
  • > (大于)成为 >

#EXAMPLE1

<?php
# 密钥应该是随机的二进制数据,
# 开始使用 scrypt, bcrypt 或 PBKDF2 将一个字符串转换成一个密钥
# 密钥是 16 进制字符串格式 $str = "需要加密的字符串";
$key = pack('H*', cbc04b7e103a0cd8b54763051cef08bc55abe029fdebae5e1d417e2ffb2a00a3"); # 显示 AES-128, 192, 256 对应的密钥长度:
# 16,24,32 字节。 $cipher = MCRYPT_RIJNDAEL_128;
$mode = MCRYPT_MODE_CBC;
$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher,$mode),MCRYPT_RAND); $str_encrypt = mcrypt_encrypt($cipher,$key,$str,$mode,$iv);
$str_encrypt = base64_encode($str_encrypt);
echo "加密后的内容是:".$str_encrypt."<br>"; $str_decrypt = base64_decode($str_decrypt);
$str_decrypt = mcrypt_decrypt($cipher,$key,$str_encrypt,$mode,$iv);
echo "解密后的内容:".$str_decrypt."<br>";

#EXAMPLE2

<?php
//$key should have been previously generated in a cryptographically safe way, like openssl_random_pseudo_bytes
$plaintext = "message to be encrypted";
$cipher = "aes-128-gcm";
if (in_array($cipher, openssl_get_cipher_methods()))
{
$ivlen = openssl_cipher_iv_length($cipher);
$iv = openssl_random_pseudo_bytes($ivlen);
$ciphertext = openssl_encrypt($plaintext, $cipher, $key, $options=0, $iv, $tag);
//store $cipher, $iv, and $tag for decryption later
$original_plaintext = openssl_decrypt($ciphertext, $cipher, $key, $options=0, $iv, $tag);
echo $original_plaintext."\n";
}
?>

PHP 常用函数总结(三)的更多相关文章

  1. 《ORACLE数据库管理与开发》第三章学习之常用函数记录

    <ORACLE数据库管理与开发>第三章学习之常用函数记录 注:文章中的*代表所要操作的列名 1.lower(*)/upper(*),将此列下的值转为小写/大写 2.initcap(*):把 ...

  2. 【PHP】最详细PHP从入门到精通(三)——PHP中的数组常用函数汇总

     PHP从入门到精通 之PHP中的数组常用函数详解 数组作为PHP中最常用的结构之一,PHP强大的数组函数功能,给数组的相关操作带来了极大的便利.今天给大家介绍的PHP中数组函数,是PHP数组中重要的 ...

  3. php基础知识(三)---常用函数--2017-04-16

    常用函数如下:(红色为重点) 1.取字符串的长度 echo strlen("hello"); 2.echo strcmp("字符串1","字符串2&q ...

  4. python的基本用法(三)字符串常用函数

    字符串常用函数 # s='.abcd.'# new_s=s.strip('.')#默认去掉字符串两边的空格和换行符,想去掉什么括号中就写什么# print('s',s)# print('new_s', ...

  5. MySQL学习笔记(三)——计算字段及常用函数

    拼接字段-Concat()函数        将值连接在一起构成单个值.注意:大多数DBMS使用+或者||来实现拼接,mysql则使用Concat()函数来实现. 去空格函数-Trim函数       ...

  6. 如果你也会C#,那不妨了解下F#(4):了解函数及常用函数

    函数式编程其实就是按照数学上的函数运算思想来实现计算机上的运算.虽然我们不需要深入了解数学函数的知识,但应该清楚函数式编程的基础是来自于数学. 例如数学函数\(f(x) = x^2+x\),并没有指定 ...

  7. Mysql常用函数,难点,注意

    一.数学函数 ABS(x)   返回x的绝对值 BIN(x)   返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x)   返回大于x的最小整数值 EXP(x)   返回值e( ...

  8. [转]SQL 常用函数及示例

    原文地址:http://www.cnblogs.com/canyangfeixue/archive/2013/07/21/3203588.html --SQL 基础-->常用函数 --===== ...

  9. Oracle常用函数

    前一段时间学习Oracle 时做的学习笔记,整理了一下,下面是分享的Oracle常用函数的部分笔记,以后还会分享其他部分的笔记,请大家批评指正. 1.Oracle 数据库中的to_date()函数的使 ...

  10. matlab进阶:常用功能的实现,常用函数的说明

    常用功能的实现 获取当前脚本所在目录 current_script_dir = fileparts(mfilename('fullpath')); % 结尾不带'/' 常用函数的说明 bsxfun m ...

随机推荐

  1. 2991:2011 求2011^n的后四位。

    2991:2011 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 已知长度最大为200位的正整数n,请求出2011^n的后四位. 输入 第一行为一个正整数k ...

  2. springboot之rabbitmq

    一.RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件).RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的.所有 ...

  3. 解决 java循环中使用 Map时 在put值时value值被覆盖的问题

    其实很简单,只需要把容器换成list 然后在循环中,每次循环末尾map = new HashMap() 或者直接在循环中一开始就实例化hashmap(Map map = new HashMap();) ...

  4. 十一、Django认证模块--Auth模块

    一.常规认证方法 我们学生管理之登录实现一文中已经了解了自己写一个登录逻辑的过程: 1.url配置 urlpatterns = [ url(r'^login/$', views.login), url ...

  5. 2018年美国大学生数学建模竞赛(MCM/ICM) E题解题思路

    任务一就是让大家去做个基本的评价,是典型的评价类问题,所以应该按照 指标+方法的步骤去做,首先就是寻找国家脆弱性的相关概念,然后选择影响国 家脆弱性的指标,如气候变化,经济发展,政治状况等等,再就是构 ...

  6. 使用Fiddler进行Web接口测试

    一.Fiddler简介1.为什么是Fiddler?抓包工具有很多,小到最常用的web调试工具firebug,达到通用的强大的抓包工具wireshark.为什么使用fiddler?原因如下: A)Fir ...

  7. 引用“kernel32”读写ini配置文件

    引用"kernel32"读写ini配置文件 unity ini kernel32 配置文件  引用"kernel32"读写ini配置文件 OverView ke ...

  8. 配置独立于系统的PYTHON环境

    配置独立于系统的PYTHON环境 python 当前用户包 一种解决方案是在利用本机的python环境的基础上,将python的包安装在当前user的.local文件夹下 一共有两种方式来实现pip的 ...

  9. 如何布局您的PC站和移动站,并表达两者之间内容的对应关系

      如何布局您的PC站和移动站,并表达两者之间内容的对应关系 目前较流量的PC站与移动站配置方式有三种,百度站在搜索引擎角度将这三种分别称为跳转适配.代码适配和自适应,以下为这三种配置方式的名词解释及 ...

  10. php从入门到放弃系列-02.php基础语法

    php从入门到放弃系列-02.php基础语法 一.学习语法,从hello world开始 PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器&qu ...