当前位置: 首页 > 面试题库 >

是否有一个PHP函数仅将斜杠添加到双引号而不是单引号

戎兴言
2023-03-14
问题内容

我正在用PHP生成JSON。

我一直在用

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

echo addslashes($string);

输出: This string has \" double quotes\"

完全有效的JSON

不幸的是,addslashes还会对有效JSON的灾难性结果进行单引号转义

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

echo addslashes($string);

输出: This string has \'single quotes\'

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


问题答案:

尽管您应该使用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) . '"';
}


 类似资料:
  • 问题内容: 这让我发疯了,所以请您帮忙… 我有一个Java字符串,我想用单引号替换所有反斜杠双引号序列,即使我逃避了我认为必要的替换命令,该命令也不会对字符串产生任何影响。 感谢任何建议。 谢谢。 问题答案: 在Java中,字符串是不可变的。您对字符串执行的任何操作都会产生新的对象。操作后,您需要重新分配值。以下内容可能会对您有所帮助。

  • 问题内容: 如何在Python中转义反斜杠和单引号或双引号? 例如: 问题答案: 你是怎么做到的 如果您从文件中读取了“长字符串”(如您在注释中所述),那么您的问题将引起误解。由于您显然不完全了解转义的工作原理,因此您写下的问题可能与您真正遇到的问题不同。 如果这些是文件的内容(如图所示为51个字节+可能是一两个行尾字符): 那么这就是在python中的样子: 您在问题中写的内容将产生: 你看得到

  • 问题内容: (假设php5)考虑 1和2之间有很大的区别吗? 如果不是,那介于1/2和3之间呢? 问题答案: 好吧,就像所有“现实生活中可能更快”的问题一样,您无法击败现实生活中的考验。 进行几次运行以分页显示所有内容,然后… 0.0035568 0.0035388 0.0025394 因此,正如预期的那样,插值实际上是相同的(噪声级别差异,可能是由于插值引擎需要处理的额外字符)。直接串联的速度约

  • 问题内容: 打电话时,我得到的键和值都用双引号括起来,如下所示: 我希望将它们括在单引号中,如下所示: 可以使用Json.Net吗? 问题答案: 是的,这是可能的。如果您显式使用而不是使用,则可以将设置为单引号。 输出: 小提琴:https : //dotnetfiddle.net/LGRl1k 请记住,在JSON中的键和值周围使用单引号被认为是非标准的(请参阅JSON.org),并且可能会导致严

  • 问题内容: 像这样将变量(例如)连接到现有字符串(例如)中是否更好: 或将变量嵌入到字符串中,如下所示: 还是使用像这样的函数更好: 就处理器时间/效率而言,哪个更好? 问题答案: 进行测试的每个人都得出结论,使用单引号在性能上略有提高。最后,单引号仅导致串联,而双引号则迫使解释器解析变量的完整字符串。 但是,这样做对于最终版本的PHP来说增加的负担很小,以致在大多数情况下,结论是这并不重要。 因

  • 问题内容: 我正在尝试将转换为,但是我不断遇到各种错误。我认为这是解决方案: 但这给出了以下异常: 问题答案: 将该参数解释为正则表达式。该是转义字符都 和。你需要对正则表达式进行两次转义: 但是你不必为此使用正则表达式,仅是因为你希望逐个字符地进行精确替换,并且这里不需要模式。因此就足够了: 更新:根据注释,你似乎想在JavaScript上下文中使用字符串。你最好使用它来覆盖更多字符。