我正在从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/会返回错误。删除“特殊”周围的双引号可验证字符串。
从PHP创建JSON字符串并正确转义它以便在JS文件中使用的最佳方法是什么?
答案 0 :(得分:35)
另一种方法是使用htmlspecialchars编码引号:
$json_array = array(
'title' => 'Example string\'s with "special" characters'
);
$json_decode = htmlspecialchars(json_encode($json_array), ENT_QUOTES, 'UTF-8');
答案 1 :(得分:25)
我成功地做到了这一点:
$json = str_replace("\u0022","\\\\\"",json_encode( $phpArray,JSON_HEX_QUOT));
默认情况下, json_encode()
会将"
转义为\"
。但json.PARSE()
的JSON仍然是错误的。因此,通过添加选项JSON_HEX_QUOT
,json_encode()
会将"
替换为\u0022
。 json.PARSE()
仍然不喜欢\u0022
。因此,我们需要将\u0022
替换为\\"
。 \\\\\"
已转义\\"
。
注意:如果您有javascript单引号问题,可以添加选项JSON_HEX_APOS
以使用unicode HEX
值替换单引号。
ex:json_encode( $phpArray, JSON_HEX_APOS|JSON_HEX_QUOT ));
答案 2 :(得分:18)
使用json_encode($json_array, JSON_HEX_QUOT);
自php 5.3:http://php.net/manual/en/json.constants.php
答案 3 :(得分:9)
来自http://www.php.net/manual/en/function.json-encode.php#100565
那就是说,引用“会产生无效的JSON,但这只是一个问题,如果你正在使用json_encode()并且只是期望PHP神奇地逃脱你的引号。你需要自己逃避。
答案 4 :(得分:1)
我刚遇到这个问题,实际的问题是我忘了在吐出实际的JSON数据之前添加一个正确的application / json头。
header('Content-Type: application/json');
答案 5 :(得分:0)
我遇到了挑战,用户无意输入€,有些用户使用双引号定义其内容。 我调整了此页面上的一些答案以及其他答案,最终定义了我的小解决方法
$products = array($ofDirtyArray);
if($products !=null) {
header("Content-type: application/json");
header('Content-Type: charset=utf-8');
array_walk_recursive($products, function(&$val) {
$val = html_entity_decode(htmlentities($val, ENT_QUOTES, "UTF-8"));
});
echo json_encode($products, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK);
}
我希望它可以帮助某人/某人改善它。
答案 6 :(得分:0)
脚本错误不在HTML标记中。
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<pre><?php print_r($_POST??'') ?></pre>
<form method="POST">
<input type="text" name="name"><br>
<input type="email" name="email"><br>
<input type="time" name="time"><br>
<input type="date" name="date"><br>
<input type="hidden" name="id"><br>
<textarea name="detail"></textarea>
<input type="submit" value="Submit"><br>
</form>
<?php
/* data */
$data = [
'name'=>'loKESH"'."'\\\\",
'email'=>'imvsrajput@demo.demo',
'time'=>date('H:i:00'),
'date'=>date('Y-m-d'),
'detail'=>'Try this var_dump(0=="ZERO") \\ \\"'." ' \\\\ ",
'id'=>123,
];
?>
<span style="display: none;" class="ajax-data"><?=json_encode($_POST??$data)?></span>
<script type="text/javascript">
/* Error */
// var json = JSON.parse('<?=json_encode($data)?>');
/* Error solved */
var json = JSON.parse($('.ajax-data').html());
console.log(json)
/* automatically assigned value by name attr */
for(x in json){
$('[name="'+x+'"]').val(json[x]);
}
</script>