在构建json
字符串时遇到一些问题,我在数据库中发现了一些包含双引号的文本。我需要用它们的转义等价物替换引号。这有效:
function escape( $str ) {
return preg_replace('/"/',"\\\"",$str);
}
但它没有考虑报价可能已被转义。如何修改表达式,使其仅适用于非转义字符?
答案 0 :(得分:4)
你需要在这里使用负面的背后隐藏
function escape( $str ) {
return preg_replace('/(?<!\\)"/',"\\\"",$str);
}
答案 1 :(得分:0)
首先尝试从所有转义的双引号中删除'\',而不是转义所有双引号。
str_replace(array('\"', '"'), array('"', '\"'), $str);
答案 2 :(得分:0)
尝试preg_replace('/([^\\\])"/', '$1\\"', $str);
答案 3 :(得分:0)
正则表达式:
(?<!\\)((?:\\\\)*)"
代码:
$re = '/(?<!\\\\)((?:\\\\\\\\)*)"/';
preg_replace($re, '$1\\"', 'foo"bar'); // foo\"bar -- slash added
preg_replace($re, '$1\\"', 'foo\\"bar'); // foo\"bar -- already escaped, nothing added
preg_replace($re, '$1\\"', 'foo\\\\"bar'); // foo\\\"bar -- not escaped, extra slash added