事实是哪种语言都一样,只是语言的规则不同.
php'[{"field":"[\"vlaue\"]"}]'
== javascript'[{"field":"[\\"vlaue\\"]"}]'
1. php
#php
$a = '[{"field":"[\"vlaue\"]"}]';
字段串替换
$a = '[{"field":"[\"vlaue\"]"}]';
$b = str_replace( '\\', '', $a);
echo $b; //[{"field":"["vlaue"]"}]
这里明显看出来\
被替换掉了
json_decode
$b = json_decode($a, true);
array(1) {
[0]=>
array(1) {
["field"]=>
string(9) "["vlaue"]"
}
}
事实上解码后的值 是" [\"value\"]"
或者说是'["value"]'
,这个时候字符串里面不存在\
了,有的只是转义符
$c = json_decode( $b, true);
array(1) {
[0]=>
string(5) "vlaue"
}
2. javascript
var a = '[{"field":"[\"vlaue\"]"}]';
JSON.parse(a);
这个转码是不可能成功的. 因为本身这个字符串,并不是一个合法的json字符串.里面的
\"
其实就是
"
var a = '[{"field":"[\\"vlaue\\"]"}]';
很多情况javascript里面的bug,都是从反斜现来的, 尤其是编码解码中需要注意.