¿Cómo eliminar la barra invertida en la función json_encode ()?

4 minutos de lectura

avatar de usuario
Ryan

Cómo quitar el (\)barra invertida en una cadena? cuando usas echo json_encode() ?

Por ejemplo:

<?php
$str = "$(\"#output\").append(\"<p>This is a test!</p>\")";

echo json_encode($str);
?>

nota: cuando hace eco de $str, no habrá problema… pero cuando hace eco usando json_encode()la (\)aparecerá la barra invertida.

¿Hay una manera de resolver esto?

  • Me encontré con los mismos problemas, resultó que estaba usando json_encode dos veces en los mismos datos, eso fue en realidad lo que estaba agregando las barras diagonales inversas.

    – eozzy

    29 de junio de 2015 a las 2:19

  • JSON requiere que los caracteres de comillas en los datos se escapen con barras invertidas, por lo que si lo está haciendo, está funcionando correctamente. Pero, ¿por qué estás codificando JSON una cadena?

    – nnnnnn

    16/02/2016 a las 12:50


avatar de usuario
Rijk

json_encode($response, JSON_UNESCAPED_SLASHES);

  • Y solo quiero enviarlo de vuelta en ajax. Solo quiero que el proceso se realice en php en lugar de en javascript.

    – Ryan

    2 de septiembre de 2011 a las 11:57

  • lo siento… ¿cómo es esta la respuesta “correcta”? JSON ahora se usa en todas partes, no solo en Javascript… es simplemente una forma de serializar datos. PHP arruina esto (junto con mucho más) al agregar escapes completamente superfluos a las comillas que no deberían tenerlas. ¡los DATOS deben tener escapes, no las comillas que envuelven los datos! Y da la casualidad de que es esencial eliminar esas comillas para que esto funcione correctamente, ya que las comillas escapadas NO son parte de JSON. así que… ¿cómo se hace?

    – Yevgueni Simkin

    12 de enero de 2013 a las 22:54

  • De acuerdo con el comentarista anterior. Hay muchos casos extremos en el mundo del desarrollo de software. Esto no es una respuesta.

    – cmal

    16 de agosto de 2014 a las 14:33

  • Si realmente coloca el json con barras invertidas en jsonlint, devolverá un json no válido. Tampoco creo que esta sea la respuesta correcta.

    – tolva

    4 de mayo de 2015 a las 8:18

  • JSON_UNESCAPED_SLASHES es para barras diagonales, no para comillas. por ejemplo, \/estas\/barras\/son\/el\/objetivo — no \”estas\”comillas\”no\”no\”el\”objetivo

    – Beto

    9 de agosto de 2017 a las 18:52

avatar de usuario
Daveloper87

Desde PHP 5.4 hay constantes que pueden ser utilizadas por json_encode() para formatear la respuesta json como quieras.

Para eliminar barras invertidas use: JSON_UNESCAPED_SLASHES. Al igual que:

json_encode($response, JSON_UNESCAPED_SLASHES);

Consulte la documentación de PHP para obtener más constantes y más información:

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

Lista de constantes JSON:

http://php.net/manual/en/json.constants.php

  • ¿Debería estar disponible desde 5.4? Ver aquí

    – ago

    29 de septiembre de 2015 a las 1:44

  • @joryl La constante debería estar disponible desde 5.4, por lo que también debería funcionar en versiones más nuevas

    – Daveloper87

    16 de febrero de 2016 a las 12:37

  • Gracias por responder 🙂 ¿Debería funcionar en 5.5, por ejemplo? Si no, ¿por qué lo quitaron? ¿Y cuál es la alternativa en versiones posteriores a 5.4?

    – joryl

    16 de febrero de 2016 a las 12:45

  • @joryl Debería funcionar con 5.4+. ¿Está viendo un problema al usarlo en una versión más nueva de PHP?

    – Daveloper87

    17 de febrero de 2016 a las 17:28

  • Acabo de descubrir en PHP 5.6 que JSON_UNESCAPED_SLASHES funciona bien para barras diagonales pero no hace nada para barras invertidas

    – Gawpertron

    7 junio 2016 a las 13:34

Si usa PHP 5.2, json_encode solo espera 1 parámetro cuando lo llame. Esta es una alternativa a la barra de unescape de los valores json:

stripslashes(json_encode($array))

No lo use si sus datos son complicados.

avatar de usuario
Yevgeny Simkin

la solucion que si funciona es esta:

$str = preg_replace('/\\\"https://stackoverflow.com/","\"", $str);

Sin embargo, debe tener mucho cuidado aquí porque debe asegurarse de que todos sus valores tengan sus comillas escapadas (lo que generalmente es cierto de todos modos, pero especialmente ahora que eliminará todos los escapes del idiota (y disfuncional) “ayudante” de PHP ” funcionalidad de agregar barras diagonales inversas innecesarias delante de todos los ID y valores de sus objetos).

Por lo tanto, php, de forma predeterminada, escapa dos veces de los valores que tienen una comilla, por lo que si tiene un valor de My name is "Joe" en su base de datos, php traerá esto de vuelta como
My name is \\"Joe\\".

Esto puede o no ser útil para usted. Si no es así, puede dar el paso adicional de reemplazar la barra inclinada inicial de esta manera:

$str = preg_replace('/\\\\\"https://stackoverflow.com/","\"", $str);

sí… es feo… pero funciona.

Luego te queda algo que se parece vagamente a JSON real.

La forma más sencilla sería

$mystring = json_encode($my_json,JSON_UNESCAPED_SLASHES);

avatar de usuario
totas

acabo de darme cuenta de eso json_encode solo se escapa \n si se usa entre comillas simples.

echo json_encode("Hello World\n");
// results in "Hello World\n"

Y

echo json_encode('Hello World\n');
// results in "Hello World\\\n"

avatar de usuario
Yerún

Si es posible. ¡Mirar!

$str = str_replace('\\', '', $str);

pero ¿Por qué querrías?

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad