$options = JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT;
$data = array('key' => '<p>test</p>');
echo json_encode($data, $options);
JSON_HEX_TAG
, JSON_HEX_AMP
, JSON_HEX_APOS
, 和 JSON_HEX_QUOT
是 PHP 中 json_encode()
函数的常量选项,它们用于在编码 JSON 时转义特定的字符为它们的十六进制形式。这些选项主要用于增加 JSON 输出的安全性。以下是每个选项的具体涵义:
JSON_HEX_TAG
- 将<
和>
转换为\u003c
和\u003e
。这主要是为了避免输出中的<
和>
被误解为 HTML 标签,从而在 Web 环境中可能导致安全问题(如跨站脚本攻击,XSS)。JSON_HEX_AMP
- 将&
转换为\u0026
。这是为了避免&
被误解为 HTML 实体,特别是在 Web 环境中。JSON_HEX_APOS
- 将单引号'
转换为\u0027
。这有助于避免在 JavaScript 中可能引起的注入攻击或其他相关问题。JSON_HEX_QUOT
- 将双引号"
转换为\u0022
。虽然 JSON 通常使用双引号来表示字符串,但在某些上下文中转义它们可能是有益的。
为了同时使用多个选项,你可以使用位运算符 |
来组合它们。例如,为了同时使用 JSON_HEX_TAG
和 JSON_HEX_AMP
,你可以这样做:
$jsonString = json_encode($data, JSON_HEX_TAG | JSON_HEX_AMP);
这样,<
, >
, 和 &
都会被转换为它们的十六进制形式。
@漏刻有时