Есть ли функция PHP, которая добавляет только косые черты в двойные кавычки, а не одиночные кавычки - PullRequest
30 голосов
/ 10 апреля 2011

Я генерирую 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\'

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

Ответы [ 4 ]

49 голосов
/ 10 апреля 2011

Хотя вы должны использовать 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) . '"';
}
13 голосов
/ 10 апреля 2011

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

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

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

addcslashes($string, '"');

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

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

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

4 голосов
/ 10 апреля 2011

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

2 голосов
/ 05 октября 2012
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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...