3

我有以下 JSON 编码的字符串:

$json = '"|\t|\n|\\\u0027|\\\u0022|"';

什么是转义所有(已经)转义字符/代码点\\\u0022\\\u0027的最有效方法,除了or 我虽然关于使用preg_replace()负前瞻正则表达式,但它没有像我预期的那样工作,输出应该是:

$json = '"|\\\t|\\\n|\\\u0027|\\\u0022|"';

我在 JSON-PHP-PCRE 逃逸的海洋中迷失了方向,有人可以帮帮我吗?

4

3 回答 3

2

这样的事情可能会在负前瞻的帮助下起作用:

<?php
  $json = '"|\t|\n|\\\u0027|\\\u0022|"';
  $s = preg_replace('~(\\\\)(?!(\\1|u002[27]))~', '$1$1$1', $json);
  var_dump($json);
  var_dump($s);
?>

输出

string(25) ""|\t|\n|\\u0027|\\u0022|""
string(29) ""|\\\t|\\\n|\\u0027|\\u0022|""
于 2011-05-09T20:42:37.590 回答
1

我对您正在尝试做的事情感到有些困惑,但我可以通过以下方式将您的输入转换为输出:

preg_replace('/\|\\([^\\])\|/', '\\\\\\$1|', $json);

注意:我不在我的电脑前,所以我无法验证这是否完美,但从这里看起来不错。

于 2011-05-09T20:24:41.700 回答
1

尝试

$result = preg_replace('/(?<!\\\\)\\\\(?!\\\\)/', '\\\\\\\\\', $subject);

\仅当 a 是单个(即既不在另一个之前也不在其后)时才找到 a\并将其替换为\\\

于 2011-05-09T20:27:15.797 回答