php - 是否有一个 PHP 函数只在双引号而不是单引号中添加斜杠

标签 php json

我正在使用 PHP 生成 JSON。

我一直在用

$string = 'This string has "double quotes"';

echo addslashes($string);

输出:这个字符串有\"双引号\"

完全有效的 JSON

不幸的是,addlashes 也会对单引号进行转义,导致有效 JSON 的灾难性结果

$string = "This string has 'single quotes'";

echo addslashes($string);

输出:这个字符串有\'单引号\'

简而言之,有没有办法只转义双引号?

最佳答案

虽然你应该使用 json_encode如果您可以使用,您也可以使用 addcslashes仅将 \ 添加到某些字符,例如:

addcslashes($str, '"\\/')

您也可以使用基于正则表达式的替换:

function json_string_encode($str) {
    $callback = function($match) {
        if ($match[0] === '\\') {
            return $match[0];
        } else {
            $printable = array('"' => '"', '\\' => '\\', "\b" => 'b', "\f" => 'f', "\n" => 'n', "\r" => 'r', "\t" => 't');
            return isset($printable[$match[0]])
                   ? '\\'.$printable[$match[0]]
                   : '\\u'.strtoupper(current(unpack('H*', mb_convert_encoding($match[0], 'UCS-2BE', 'UTF-8'))));
        }
    };
    return '"' . preg_replace_callback('/\\.|[^\x{20}-\x{21}\x{23}-\x{5B}\x{5D}-\x{10FFFF}/u', $callback, $str) . '"';
}

关于php - 是否有一个 PHP 函数只在双引号而不是单引号中添加斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5611468/

相关文章:

java - 使用 Jackson 反序列化包含 2 个具有相同子对象的对象的数组?

PHP-MySQL : Returning Query as Array index name and value

php - 苹果推送通知 - PHP

php - Laravel,使用 session 将输入变量从页面传递到其他页面

javascript - 如何从 Javascript 中的 POST 请求读取 JSON 值

json - 如何显示字符而不是ascii?

ruby-on-rails - Rails ActiveModel::Serializers 中的 JSON API 样式旁加载

html - RestTemplate 接收 html 内容类型而不是 json

php - FPDF 无法正确居中文本

PHP SoapClient : How to pass complex-type parameters to a webservice?