Я создаю 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);