PHP JSON 字符串,对 JS 输出的双引号进行转义

2022-08-30 09:14:37

我正在从PHP数组创建一个JSON字符串。我使用.json_encode()

$data = array(
    'title' => 'Example string\'s with "special" characters'
);

$data = json_encode( $data );

$data使用 进行本地化,可通过全局变量访问。wp_localize_script()data

在JS文件中,我可以通过以下方式访问信息:

var data     = data.replace( /"/g, '"' ),
    jsonData = jQuery.parseJSON( data );

console.log( jsonData );

这将导致输出:

{ "title":"Example string's with "special" characters" }

将该结果输入到 http://jsonlint.com/ 将返回错误。删除“special”两边的双引号将验证字符串。

从PHP创建JSON字符串并正确转义以在JS文件中使用的最佳方法是什么?


答案 1

另一种方法是使用htmlspecialchars对引号进行编码:

$json_array = array(
    'title' => 'Example string\'s with "special" characters'
);

$json_decode = htmlspecialchars(json_encode($json_array), ENT_QUOTES, 'UTF-8');

答案 2

我成功地做到了这一点:

$json = str_replace("\u0022","\\\\\"",json_encode( $phpArray,JSON_HEX_QUOT)); 

json_encode()默认情况下将转义为 。但它仍然是错误的 JSON。因此,通过添加选项,将替换为 。 还是不会喜欢.因此,我们需要替换为 .已转义 。"\"json.PARSE()JSON_HEX_QUOTjson_encode()"\u0022json.PARSE()\u0022\u0022\\"\\\\\"\\"

注意:如果您有javascript单引号问题,则可以添加将单引号替换为unicode值的选项。JSON_HEX_APOSHEX

前任:json_encode( $phpArray, JSON_HEX_APOS|JSON_HEX_QUOT ));


推荐