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

    Tại sao xuất hiện ngày này ("2011/7/11") với json_encode hiển thị ("2011\/7\/11")?Phát hành sự cố với json_encode. Tại sao và làm thế nào để giải quyết nó?

    Làm cách nào để chuyển đổi "2011\/7\/11" thành "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 "' là chuỗi JSON hợp lệ ... tất cả '/' phải được thoát bằng cách thêm tiền tố \ –

    +0

    @Salman A: tôi phải làm gì? –

    +0

    bạn định làm gì với đầu ra? tại sao không 'echo $ ok;'? –

    Trả lời

    31

    Trong PHP 5.4, bạn có thể sử dụng JSON_UNESCAPED_SLASHES:

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

    Nếu không, bạn phải làm một số thông tin sau xử lý

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

    Lưu ý rằng \/ là cách hợp lệ để thể hiện / bằng JSON.

    +1

    Về cơ bản nó là một lỗi trong PHP mà json_encode yêu cầu cờ này xuất ra json điển hình. Các đặc tả json không yêu cầu slashes để được thoát. https://bugs.php.net/bug.php?id=49366 –

    +0

    PHP sử dụng logic lịch sử đã gây ra magic_quotes_gpc xuất hiện trong quá khứ. Cụ thể là, nó cố gắng mã hóa một nửa để tránh các cuộc tấn công đơn giản nhất do thiếu mã hóa. Trong trường hợp này, lý do là cho phép nhà phát triển web mã "" "' trong đó $ bất kỳ thứ gì có thể bao gồm chữ "" "' ở đâu đó. Mã hóa tùy chọn của dấu gạch chéo sẽ chuyển đổi '" "' thành "" <\/script> "' để tránh vấn đề giải thích phần còn lại của chuỗi dưới dạng HTML thô. –

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

    nó sẽ loại bỏ tất cả tiền đạo chém và sẽ cung cấp cho bạn kết quả mong muốn ..

    +0

    lỗi này: Lỗi phân tích cú pháp: lỗi cú pháp, T_ENCAPSED_AND_WHITESPACE không mong muốn ... –

    +0

    có một dấu trích dẫn bị thiếu sau dấu thoát. Dòng đó phải là '$ data_go = str_replace ('\' ',' ', $ data_go);' –

    +4

    Mã này chỉ đơn giản là gắn dấu nháy đơn với không có gì. Artefacto đã đúng. – xrstf

    Các vấn đề liên quan