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

后端 未结 4 1191
Happy的楠姐
Happy的楠姐 2020-12-09 08:06

I am generating JSON with PHP.

I have been using

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

echo addslashes($string);

output

相关标签:
4条回答
  • 2020-12-09 08:25

    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) . '"';
    }
    
    0 讨论(0)
  • 2020-12-09 08:37

    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.

    0 讨论(0)
  • 2020-12-09 08:46
    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);
    
    0 讨论(0)
  • 2020-12-09 08:50

    If you are generating JSON, why not just use the json_encode() function ?

    0 讨论(0)
提交回复
热议问题