Есть ли функция PHP, которая добавляет только косые черты в двойные кавычки? Не одиночные кавычки

Я создаю JSON с PHP.

Я использую

$string = 'This string has "double quotes"'; echo addslashes($string); 

выходы: This string has \" double quotes\"

Совершенно действительный JSON

К сожалению, addlashes также избегает одинарных кавычек с катастрофическими результатами для действительного JSON

 $string = "This string has 'single quotes'"; echo addslashes($string); 

выходы: This string has \'single quotes\'

Короче говоря, есть ли способ избежать двойных кавычек?

Хотя вы должны использовать json_encode если он вам доступен, вы также можете использовать addcslashes для добавления \ only к определенным символам, например:

 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) . '"'; } для 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, которая добавляет только косые черты в двойные кавычки? Не одиночные кавычки

Нет функции, такой как addslashes() которая добавляет косую черту в двойные кавычки.

Однако вы можете использовать addcslashes() только для добавления косой черты к определенным символам, например, только для двойных кавычек:

 addcslashes($string, '"'); 

Это точно так же, как описано. Если вы хотите, чтобы он был совместим с stripcslashes() , вам нужно добавить косую черту в список символов:

 addcslashes($string, '"\\'); 

Это должно делать то, о чем вы просили. Я не знаю, совместимо ли это с json-кодировкой.

Если вы создаете JSON, почему бы просто не использовать функцию json_encode() ?

 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);