2011-04-10 22 views
26

Estoy generando JSON con PHP.¿Existe una función PHP que solo agregue barras inclinadas a comillas dobles? NO comillas simples

He estado usando

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

echo addslashes($string); 

salidas: This string has \" double quotes\"

JSON perfectamente válido

addslashes Desgraciadamente también escapa comillas simples con resultados catastróficos para JSON válida

$string = "This string has 'single quotes'"; 

echo addslashes($string); 

salidas: This string has \'single quotes\'

En resumen, ¿hay alguna manera de evitar las comillas dobles?

+11

Uso: http://php.net/manual/en/function.json-encode.php – igorw

Respuesta

43

Aunque se debe utilizar json_encode si está disponible para usted, usted podría también utilizar addcslashes añadir \ sólo a ciertos personajes como:

addcslashes($str, '"\\/') 

También es posible usar un reemplazo basado en expresiones regulares:

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) . '"'; 
} 
+3

¡perfecto!¡Nunca supe de esta función! tener un día increíble – Tim

4

Si está generando JSON, ¿por qué no simplemente utiliza la función json_encode()?

+6

Si el persone no lo hizo Conozca esta función y resuelve su problema, está dentro del alcance de la pregunta. – koen

+0

@koen Exactamente. Además, también preguntó: "En resumen, ¿hay alguna forma de evitar las comillas dobles?" – rzetterberg

+0

Gracias. Sí, desafortunadamente, json_encode no se aplica a esta situación. – Tim

9

¿Hay una función PHP que solo agrega barras diagonales a comillas dobles NO a comillas simples

No hay función como addslashes() que solo agrega una barra inclinada a comillas dobles.

Sin embargo, puede utilizar addcslashes() para agregar barras en caracteres específicos, p. sólo a comillas dobles:

addcslashes($string, '"'); 

que hace exactamente como se describe. Si usted quiere tener compatible con stripcslashes() sin embargo, es necesario agregar la barra en sí a la lista de caracteres:

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

Que debe hacer el trabajo que ha estado pidiendo. No tengo idea si eso es compatible con la codificación json.

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

Para utilizar la función sólo hay que utilizar

$text = json_string_encode($text); 
+0

¡Gracias por publicar una respuesta! Si bien un fragmento de código podría responder a la pregunta, sigue siendo genial agregar información adicional, como explicar, etc. – j0k

+0

Exactamente. A veces PHP apesta. –

Cuestiones relacionadas