在php中用json字符串中的单引号替换双引号

在php中用json字符串中的单引号替换双引号,php,json,preg-replace,Php,Json,Preg Replace,我有一个json字符串,其中包含一些html和属性。我试图在这个字符串中用单引号转义或替换双引号。我的代码可以处理一些html属性,但不能处理所有属性。 我的例子是: $json='{"en":"<b class="test" size="5" >Description</b>"}'; $json=preg_replace('/([^:,{])"([^:,}])/', "$1".'\''."$2",$json); echo htmlspecialchars($json);

我有一个json字符串,其中包含一些html和属性。我试图在这个字符串中用单引号转义或替换双引号。我的代码可以处理一些html属性,但不能处理所有属性。

我的例子是:

$json='{"en":"<b class="test" size="5" >Description</b>"}';
$json=preg_replace('/([^:,{])"([^:,}])/', "$1".'\''."$2",$json);
echo htmlspecialchars($json);
//ouput: {"en":"<b class='test' size='5" >Description</b>"}
$json='{“en”:“Description”}';
$json=preg_replace('/([^:,{])”([^:,}])/',“$1”。\''.'''.'''.''.$2',$json);
echo htmlspecialchars($json);

//输出:{“en”:“试试这个:
str_replace('','',$json);

$json='{“en”:“Description”}';
$json=str_replace(“”,“”,$json);
echo htmlspecialchars($json);

输出将:
{'en':'Description'}

我希望这能像预期的那样工作
([^{,:])”(?![},:])

$json='{“en”:“Description”}';
$json=preg_replace(“/([^{,:])”(?![},:])/”,“$1”。“\”,“$2”,$json);
导致

{"en":"<b class='test' size='5' >Description</b>"}
{“en”:“Description”}

谢谢您的回答。json的值必须仍然有双引号。有趣的问题。您尝试了吗?在您的示例中,这不是一个json字符串。是什么创建了这样一个奇怪的字符串?您能修复它以提供真正的json(使用“正确转义”吗)取而代之?谢谢这正是我所需要的:)很好的解决方案。我们应该在示例字符串中添加最后一个引号的问题是,它前面的字符已经被上一个匹配使用。您的解决方案使用了“负前瞻”。这不使用字符。问题已解决。
$json='{"en":"<b class="test" size="5" >Description</b>"}';
$json=str_replace('"', "'",$json);
echo htmlspecialchars($json);
$json='{"en":"<b class="test" size="5" >Description</b>"}';
$json=preg_replace('/([^{,:])"(?![},:])/', "$1".'\''."$2",$json);
{"en":"<b class='test' size='5' >Description</b>"}