wordpress源码-对 JSON 进行转义使其安全嵌入至JavaScript 代码

$variations_attr = function_exists('wc_esc_json') ? 
wc_esc_json($variations_json) : 
_wp_specialchars($variations_json, ENT_QUOTES, 'UTF-8', true);

这段代码主要是对变量$variations_json进行转义处理,以此保证它能在 JavaScript 环境里被安全使用。

wc_esc_json函数是 WooCommerce 插件专门提供的,其用途是对 JSON 数据进行转义。

_wp_specialchars是WordPress 的内置函数,对特殊字符进行转义

为什么要对json数据进行转义呢?

在 JavaScript 里,字符串可以用单引号(’)或者双引号(”)来界定。要是 JSON 数据中包含与字符串界定符相同的引号,就会导致字符串提前结束,进而引发语法错误

未转义的情况:

var jsonStr = '{"name": "O'Reilly", "price": "10$"}';
// 实际效果:
// var jsonStr = '{"name": "O'Reilly...  <- 单引号冲突,字符串提前结束

转义后的情况:

var jsonStr = '{"name": "O\'Reilly", "price": "10$"}';
// 正确解析为:
// {
//   "name": "O'Reilly",
//   "price": "10$"
// }