10/10/2018, 00:12

json_encode, ở đâu tìm cái tương đương ?

Cái host của tui không cài đặt sẵn thư viện để chạy hàm này. Vấn đề nảy sinh khi tui viết 1 class dùng đọc RSS, nó đây :

http://hlinhlan.uni.cc/act/snapi.php...=25&output=xml

Có 3 tham số truyền vào URL gồm :

- url : địa chỉ feed
- lim : số entries trích lấy từ nguồn tin
- output : định dạng

Giá trị của output chỉ có thể là "xml" hoặc "json".

Tui đang dùng tạm 1 hàm đơn giản này, nhưng thỉnh thoảng vẫn bị lỗi khi gặp các nguồn tin sử dụng ký tự lạ.

PHP Code:
function jsonEncode($string){
  
$search  = array('" "" "'"');
  
$replace = array('\''\n''\r''"');
     
$string  str_replace($search$replace$string);
 return 
'"'.$string.'"';

Xin hỏi các bác có mã PHP nào cho ra kết quả tương tự json_encode không ạ ?


[=========> Bổ sung bài viết <=========]

Vấy đề đã được giải quyết xong.

Nhờ chỉ dẫn của bác pcdinh, tui tìm đến thư viện JSON_Service :

http://mike.teczno.com/JSON/doc/

Và :

"La Nati s'est imposu006500202-0 gru00630065 u00200075n doublu00200064e Hakan Yakin."
zoejoe viết 02:24 ngày 10/10/2018
PHP Code:
if (!function_exists('json_encode'))
{
  function 
json_encode($a=false)
  {
    if (
is_null($a)) return 'null';
    if (
$a === false) return 'false';
    if (
$a === true) return 'true';
    if (
is_scalar($a))
    {
      if (
is_float($a))
      {
        
// Always use "." for floats.
        
return floatval(str_replace(",""."strval($a)));
      }

      if (
is_string($a))
      {
        static 
$jsonReplaces = array(array("\\""/""\n""\t""\r""\b""\f"'"'), array('\\\\''\\/''\\n''\\t''\\r''\\b''\\f''\"'));
        return 
'"' str_replace($jsonReplaces***91;0***93;, $jsonReplaces***91;1***93;, $a) . '"';
      }
      else
        return 
$a;
    }
    
$isList true;
    for (
$i 0reset($a); $i count($a); $i++, next($a))
    {
      if (
key($a) !== $i)
      {
        
$isList false;
        break;
      }
    }
    
$result = array();
    if (
$isList)
    {
      foreach (
$a as $v$result***91;***93; = json_encode($v);
      return 
'***91;' join(','$result) . '***93;';
    }
    else
    {
      foreach (
$a as $k => $v$result***91;***93; = json_encode($k).':'.json_encode($v);
      return 
'{' join(','$result) . '}';
    }
  }

Hàm này em tham khảo ở PHP.NET của Steve
(corrected)
I've modified jjoss' php2js function to remove the extra whitespace (not needed for machine-readable output) and leave quotes off of non-string variables so that it more closely resembles the output of json_encode. In my testing this function and json_encode return the exact same result. I use this as a substitute if json_encode is not defined, so if anyone finds any differences between this and json_encode I would like to see the corrections.
3do viết 02:23 ngày 10/10/2018
tham khảo:

http://pear.php.net/pepr/pepr-proposal-show.php?id=198
http://framework.zend.com/manual/en/zend.json.html

and more: http://www.json.org/
sacroyant viết 02:28 ngày 10/10/2018
Không phải kiểu đó đâu Zoe. Ở thư viện kia, các từ non-ainsi được thay bằng mã Unicode tương ứng với chúng, và js hiểu được. Cậu để ý ký hiệu "\u" ở một số từ trong chuỗi :

"La Nati s'est impos\u006500202-0 gr\u00630065 \u00200075n doubl\u00200064e Hakan Yakin."

View source Gmail cũng thấy nó làm vậy với các thông điệp

Thank 3do, lát rảnh tớ sẽ nghiên cứu thêm
zoejoe viết 02:15 ngày 10/10/2018
Được gửi bởi sacroyant
Không phải kiểu đó đâu Zoe. Ở thư viện kia, các từ non-ainsi được thay bằng mã Unicode tương ứng với chúng, và js hiểu được. Cậu để ý ký hiệu "\u" ở một số từ trong chuỗi :

"La Nati s'est impos\u006500202-0 gr\u00630065 \u00200075n doubl\u00200064e Hakan Yakin."

View source Gmail cũng thấy nó làm vậy với các thông điệp

Thank 3do, lát rảnh tớ sẽ nghiên cứu thêm
À, ra thế Em cũng coi phát xem sao
Bài liên quan
0