json_encode($list, 15) - 啥是 15?

Posted

技术标签:

【中文标题】json_encode($list, 15) - 啥是 15?【英文标题】:json_encode($list, 15) - what is 15?json_encode($list, 15) - 什么是 15? 【发布时间】:2020-09-15 05:49:38 【问题描述】:

我注意到了,laravel 刀片 @json($list) 指令 (https://laravel.com/docs/7.x/blade)

正在转换为

<?php echo json_encode($list, 15, 512) ?>

15 是什么?

我在可用选项中没有看到这个选项

选项 位掩码包括JSON_FORCE_OBJECT,JSON_HEX_QUOT,JSON_HEX_TAG,JSON_HEX_AMP,JSON_HEX_APOS,JSON_INVALID_UTF8_IGNORE,JSON_INVALID_UTF8_SUBSTITUTE,JSON_NUMERIC_CHECK,JSON_PARTIAL_OUTPUT_ON_ERROR,JSON_PRESERVE_ZERO_FRACTION,JSON_PRETTY_PRINT,JSON_UNESCAPED_LINE_TERMINATORS,JSON_UNESCAPED_SLASHES,JSON_UNESCAPED_UNICODE,JSON_THROW_ON_ERROR。 P>的

PS 你可以尝试解码更多类似的指令

 '@json($list)'

【问题讨论】:

那些JSON_* constants 都是整数。 $options 参数是一个整数位掩码。如果您知道所需的值,则无需使用常量 【参考方案1】:

这是OR使用这些选项的结果:

JSON_HEX_QUOT | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_TAG

15 是二进制的1111,转储我们可以看到的所有 JSON 常量

foreach (get_defined_constants() as $c => $v) 
    if (substr($c, 0, 4) !== "JSON") continue;

    echo "$c ".decbin($v)."\n";

那个

JSON_HEX_TAG 1
JSON_HEX_AMP 10
JSON_HEX_APOS 100
JSON_HEX_QUOT 1000
...

这些选项结合起来给出十进制的结果数字111115

【讨论】:

以上是关于json_encode($list, 15) - 啥是 15?的主要内容,如果未能解决你的问题,请参考以下文章

运行 json_encode 后替换 \r\n (换行符)

json_encode返回的数据怎么接收

json_encode在编码字符串时会自动加上双引号,怎么能去掉?

表单里面如何传json_encode后的字符串给后端?

serialize/json_encode 到一个字段或将原始数据保留在 db 的多个字段中?

2017.8.15