Есть ли функция 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\'
Короче говоря, есть ли способ избежать двойных кавычек?
Ответы
Ответ 1
Хотя вы должны использовать 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) . '"';
}
Ответ 2
Есть ли функция PHP, которая добавляет только косые черты в двойные кавычки? Не одинарные кавычки
Нет такой функции, как addslashes()
, которая добавляет косую черту в двойные кавычки.
Однако вы можете использовать addcslashes()
только для добавления косых черт к определенным символам, например. только для двойных кавычек:
addcslashes($string, '"');
Это точно так же, как описано. Если вы хотите, чтобы он был совместим с stripcslashes()
, вам нужно добавить косую черту в список символов:
addcslashes($string, '"\\');
Это должно выполнить задание, о котором вы просили. Я не знаю, совместимо ли это с кодировкой json.
Ответ 3
Если вы создаете JSON, почему бы просто не использовать функцию json_encode()
?
Ответ 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 );
}
Чтобы использовать эту функцию, вам просто нужно использовать
$text = json_string_encode($text);