php
  • codeigniter
  • date
  • json
  • 2011-07-19 10 views 12 likes 
    12

    ¿Por qué la salida de esta fecha ("2011/7/11") con json_encode muestra ("2011\/7\/11")?Problema de corte con json_encode. ¿Por qué y cómo resolverlo?

    ¿Cómo puedo convertir "2011\/7\/11" en "2011/7/11"?

    $data_go = '2011/7/11'; 
    $ddmmyyy='([1-9][\d]{3})[- \/.]([0-1][\d])[- \/.]([0-3][\d])'; 
          if(preg_match("/$ddmmyyy$/", $data_go)) { 
          $year = substr($data_go,0,4); 
          $month = substr($data_go,5,2); 
          $day = substr($data_go,8,2); 
          $j2g = $this->convert_date->JalaliToGregorian($year, $month, $day); 
          $ok = $j2g[0]."/".$j2g[1]."/".$j2g[2]; 
          }else { 
           return FALSE; 
          } 
    echo json_encode($ok); // output "2011\/7\/11" 
    
    +1

    '" 2011 \/7 \/11 "' es una cadena JSON válida ... todo '/' se debe escapar con el prefijo \ –

    +0

    @Salman A: ¿qué hago? ¿Cómo es? –

    +0

    ¿Qué piensas hacer con la salida? ¿por qué no 'echo $ ok;'? –

    Respuesta

    31

    En PHP 5.4, puede utilizar JSON_UNESCAPED_SLASHES:

    echo json_encode("2011/7/11", JSON_UNESCAPED_SLASHES); 
    

    De lo contrario, usted tiene que hacer algún postproceso trivial

    str_replace('\\/', '/', json_encode("2011/7/11")); 
    

    Tenga en cuenta que \/ es una forma válida de representar / en JSON.

    +1

    Es esencialmente un error en PHP que json_encode requiere que este indicador emita json típico. La especificación json no requiere barras para escaparse. https://bugs.php.net/bug.php?id=49366 –

    +0

    PHP usa la lógica histórica que provocó que magic_quotes_gpc apareciera en el pasado. A saber, trata de hacer una codificación a medias para evitar la mayoría de los ataques simples debido a la falta de codificación. En este caso, la razón es permitir que el programa de desarrollo web codifique '" "' en algún lado. La codificación opcional de barras convertirá '" "' en '" <\/script> "' lo que evita el problema de interpretar el resto de la cadena como HTML sin formato. –

    -9
    $data_go = str_replace('\'','', $data_go); 
    

    que eliminará todas las barras diagonales hacia delante y le dará resultado deseado ..

    +0

    esto tiene error: Parse error: error de sintaxis, inesperado T_ENCAPSED_AND_WHITESPACE ... –

    +0

    hay una comilla única faltante después del escapado. Esa línea debe ser '$ data_go = str_replace ('\' ',' ', $ data_go);' –

    +4

    Este código simplemente relaciona comillas simples con nada. Artefacto acertó. – xrstf

    Cuestiones relacionadas