Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有一个PHP函数只在双引号而不是单引号中添加斜杠_Php_Json - Fatal编程技术网

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

是否有一个PHP函数只在双引号而不是单引号中添加斜杠,php,json,Php,Json,我正在用PHP生成JSON 我一直在使用 $string = 'This string has "double quotes"'; echo addslashes($string); 输出:此字符串有“双引号” 完全有效的JSON 不幸的是,对于有效的JSON,addslashes也会转义单引号,并导致灾难性的结果 $string = "This string has 'single quotes'"; echo addslashes($string); 输出:此字符串有“单引号” 简言

我正在用PHP生成JSON

我一直在使用

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

echo addslashes($string);
输出:
此字符串有“双引号”

完全有效的JSON

不幸的是,对于有效的JSON,addslashes也会转义单引号,并导致灾难性的结果

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

echo addslashes($string);
输出:
此字符串有“单引号”


简言之,是否有一种方法可以只转义双引号?

如果您正在生成JSON,为什么不直接使用该函数?

虽然如果您可以使用该函数,您也可以使用它来仅向某些字符添加
\
,例如:

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函数只在双引号而不是单引号中添加斜杠

没有这样的函数只在双引号中添加斜杠

但是,您可以使用仅向特定字符添加斜杠,例如仅向双引号添加斜杠

addcslashes($string, '"');
这正是所描述的。但是,如果要使其与兼容,则需要将斜杠本身添加到字符列表中:

addcslashes($string, '"\\');
这应该能完成你一直要求的工作。我不知道这是否与json编码兼容

function json_string_encode( $str ) {
   $from = array('"');    // Array of values to replace
   $to = array('\\"');    // Array of values to replace with

   // Replace the string passed
   return str_replace( $from, $to, $str );
}
要使用该函数,只需使用

$text = json_string_encode($text);

用法:如果这个人不知道这个函数,而它解决了他的问题,那么它就在问题的范围内。@koen完全正确。此外,他还问:“简言之,有没有办法避免双重引用?”谢谢。是,很遗憾,json_encode不适用于这种情况。json_encode()对于某些字符组合将失败,如“\”。您将得到一个解析错误。你可以在之前使用addcslashes来转义这样的序列。谢谢你的回复!虽然一个代码片段可以回答这个问题,但添加一些附加信息仍然很好,比如解释等等。。