Luk*_*uke 39 php json escaping double-quotes
我正在从PHP数组创建一个JSON字符串.我用它编码了json_encode().
$data = array(
'title' => 'Example string\'s with "special" characters'
);
$data = json_encode( $data );
Run Code Online (Sandbox Code Playgroud)
$data使用本地化wp_localize_script()并可通过全局data变量访问.
在JS文件中,我可以通过以下方式访问信息:
var data = data.replace( /"/g, '"' ),
jsonData = jQuery.parseJSON( data );
console.log( jsonData );
Run Code Online (Sandbox Code Playgroud)
这导致输出:
{ "title":"Example string's with "special" characters" }
Run Code Online (Sandbox Code Playgroud)
将结果输入http://jsonlint.com/会返回错误.删除"特殊"周围的双引号可验证字符串.
从PHP创建JSON字符串并正确转义它以在JS文件中使用的最佳方法是什么?
小智 40
另一种方法是使用htmlspecialchars对引号进行编码:
$json_array = array(
'title' => 'Example string\'s with "special" characters'
);
$json_decode = htmlspecialchars(json_encode($json_array), ENT_QUOTES, 'UTF-8');
Run Code Online (Sandbox Code Playgroud)
Gré*_*une 28
我成功地做到了这一点:
$json = str_replace("\u0022","\\\\\"",json_encode( $phpArray,JSON_HEX_QUOT));
Run Code Online (Sandbox Code Playgroud)
json_encode()默认情况下将转义"为\".但它仍然是错误的JSON json.PARSE().所以通过添加选项JSON_HEX_QUOT,json_encode()将替换"为\u0022. json.PARSE()仍然不会喜欢\u0022.所以,这时我们就需要更换\u0022用\\".该\\\\\"转义\\".
注意:如果您有javascript单引号问题,可以添加JSON_HEX_APOS用unicode HEX值替换单引号的选项.
例如: json_encode( $phpArray, JSON_HEX_APOS|JSON_HEX_QUOT ));
小智 19
json_encode($json_array, JSON_HEX_QUOT);
自php 5.3起使用:http://php.net/manual/en/json.constants.php
来自http://www.php.net/manual/en/function.json-encode.php#100565
也就是说,引用"将产生无效的JSON,但这只是一个问题,如果你使用json_encode()并且只是期望PHP神奇地逃脱你的引号.你需要自己逃避.
小智 6
这是一个处理单引号和双引号的解决方案:
<?php
$php_data = array("title"=>"Example string's with \"special\" characters");
$escaped_data = json_encode($php_data, JSON_HEX_QUOT | JSON_HEX_APOS);
$escaped_data = str_replace(['\u0022', '\u0027'], ["\\\"", "\\'"], $escaped_data);
?>
<script>
// no need to use JSON.parse()...
var js_data = <?= $escaped_data ?>;
alert(js_data.title); // should alert `Example string's with "special" characters`
</script>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
115104 次 |
| 最近记录: |