Php escape double quotes only

I am generating JSON with PHP.

I have been using

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

echo addslashes[$string];

outputs: This string has \" double quotes\"

Perfectly valid JSON

Unfortunately addslashes also escapes single quotes with catastrophic results for valid JSON

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

echo addslashes[$string];

outputs: This string has \'single quotes\'

In short, is there a way to only escape double quotes?

Erik B

39.2k24 gold badges115 silver badges127 bronze badges

asked Apr 10, 2011 at 11:33

1

Although you should use json_encode if it’s available to you, you could also use addcslashes to add \ only to certain characters like:

addcslashes[$str, '"\\/']

You could also use a regular expression based replacement:

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] . '"';
}

answered Apr 10, 2011 at 11:42

GumboGumbo

628k106 gold badges767 silver badges838 bronze badges

0

Is there a PHP function that only adds slashes to double quotes NOT single quotes

There is no function like addslashes[] that only adds a slash to double quotes.

However you can make use of addcslashes[] to only add slashes to specific characters, e.g. only to double quotes:

addcslashes[$string, '"'];

That does exactly as described. If you want to have it compatible with stripcslashes[] however, you need to add the slash itself to the list of chars:

addcslashes[$string, '"\\'];

That should do the job you've been asking for. I have no idea if that is compatible with json encoding.

Jon Surrell

9,0247 gold badges47 silver badges53 bronze badges

answered Apr 10, 2011 at 11:54

hakrehakre

187k48 gold badges419 silver badges803 bronze badges

If you are generating JSON, why not just use the json_encode[] function ?

answered Apr 10, 2011 at 11:36

Pascal MARTINPascal MARTIN

388k77 gold badges646 silver badges656 bronze badges

4

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 ];
}

To use the function you simply need to use

$text = json_string_encode[$text];

Jay Gilford

15.1k6 gold badges35 silver badges55 bronze badges

answered Oct 5, 2012 at 14:19

1

How do you escape quotes in PHP?

In PHP, an escape sequence starts with a backslash \ . Escape sequences apply to double-quoted strings. A single-quoted string only uses the escape sequences for a single quote or a backslash.

Should I use single or double quotes PHP?

In PHP, people use single quote to define a constant string, like 'a' , 'my name' , 'abc xyz' , while using double quote to define a string contain identifier like "a $b $c $d" . echo "my $a"; This is true for other used of string.

What is the use of Addslashes in PHP?

The addslashes[] function returns a string with backslashes in front of predefined characters. The predefined characters are: single quote [']

How do I backslash a string in PHP?

The simplest way to specify a string is to enclose it in single quotes [the character ' ]. To specify a literal single quote, escape it with a backslash [ \ ]. To specify a literal backslash, double it [ \\ ].

Chủ Đề