1

在构建字符串遇到问题后,json我在数据库中发现了一些包含双引号的文本。我需要用转义的等价物替换引号。这有效:

function escape( $str ) {
    return preg_replace('/"/',"\\\"",$str);
}

但它没有考虑到报价可能已经被转义。如何修改表达式,使其仅适用于非转义字符?

4

4 回答 4

4

你需要在这里使用负面的lookbehind

function escape( $str ) {
    return preg_replace('/(?<!\\)"/',"\\\"",$str);
}
于 2013-10-14T22:50:44.127 回答
0

首先尝试从所有转义的双引号中删除 '\',而不是转义所有双引号。

str_replace(array('\"', '"'), array('"', '\"'), $str);
于 2013-09-23T07:18:18.653 回答
0

尝试preg_replace('/([^\\\])"/', '$1\\"', $str);

于 2013-09-23T07:38:44.847 回答
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
于 2017-10-16T20:27:48.847 回答