我有以下JSON编码的字符串:
$json = '"|\t|\n|\\\u0027|\\\u0022|"';
什么是最有效的方法来转义所有已经转义过的字符/码点,除了\\\u0022或\\\u0027?我考虑使用preg_replace()与负向先行断言正则表达式,但它并不像我预期的那样工作,输出应该是:
$json = '"|\\\t|\\\n|\\\u0027|\\\u0022|"';
我在 JSON-PHP-PCRE 转义的海洋中感到迷失,有人可以帮我解决吗?
我有以下JSON编码的字符串:
$json = '"|\t|\n|\\\u0027|\\\u0022|"';
$json = '"|\\\t|\\\n|\\\u0027|\\\u0022|"';
我在 JSON-PHP-PCRE 转义的海洋中感到迷失,有人可以帮我解决吗?
如果使用负向先行断言,类似这样的内容可能有效:
<?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|""
我有点困惑你具体想做什么,但是我可以用这个将你的输入转换为输出:
preg_replace('/\|\\([^\\])\|/', '\\\\\\$1|', $json);
尝试
$result = preg_replace('/(?<!\\\\)\\\\(?!\\\\)/', '\\\\\\\\\', $subject);
这个函数只会找到单个的 \
(即既不是前导也不是后继的 \
),并将其替换为 \\\
。
|\\t|\\n...
这样的东西。你到底想做什么? - Justin Morganstripslashes()
函数,因此效果应该与您的完全相同。我的目标是从转义的\u002[27]
代码点中删除转义符。@Marcel,@Unkwntech:你们为什么这么说?在我看来没问题啊。 - Alix Axel