字符串中的反斜线

事实是哪种语言都一样,只是语言的规则不同.
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);

字符串中的反斜线_第1张图片
test1

这个转码是不可能成功的. 因为本身这个字符串,并不是一个合法的json字符串.里面的 \" 其实就是 "

var a = '[{"field":"[\\"vlaue\\"]"}]';
字符串中的反斜线_第2张图片
test2

很多情况javascript里面的bug,都是从反斜现来的, 尤其是编码解码中需要注意.

你可能感兴趣的:(字符串中的反斜线)