2012-03-21 29 views
11

Khi sử dụng echo json_encode ($ array, JSON_UNESCAPED_UNICODE);json_encode với tùy chọn JSON_UNESCAPED_UNICODE

tôi nhận được lỗi này

Cảnh báo: json_encode() dự đoán chính xác 1 tham số, 2 cho

+5

Lệnh 'tham số options' đã được bổ sung trong PHP 5.3.0. –

+4

Và JSON_UNESCAPED_UNICODE được thêm vào trong PHP 5.4.0 –

+0

Điều này có thể hữu ích: http://stackoverflow.com/questions/16498286/why-does-the-php-json-encode-function-convert-utf-8-strings-to -hexadecimal-entit –

Trả lời

7

phiên bản php của bạn có thể quá thấp:

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

string json_encode (mixed $value [, int $options = 0 ]) 

5.3.0 The options parameter was added 
+0

hmm ok và nếu đây là trường hợp làm thế nào tôi có thể làm điều tương tự nhưng với kịch bản khác nhau – Ben

+2

Tại http://php.net/manual/en/function.json-encode.php có một bình luận với " Thay thế đơn giản cho JSON_UNESCAPED_UNICODE (ví dụ: PHP <5.4) " – biziclop

+0

@EvenJohnson. 'JSON_UNESCAPED_UNICODE' có lẽ không thực sự cần thiết. Nếu phiên bản PHP của bạn quá thấp, chỉ cần làm mà không có nó. – TRiG

4

Xem bản vá tại http://code.google.com/p/apns-php/issues/detail?id=22 cho phép chức năng tương tự trên PHP 5.2.

Về cơ bản chạy một cái gì đó như thế này:

foreach ($array as &$val) { 
    $val = preg_replace_callback('/\\\\u([0-9a-f]{4})/i', 
     function($matches) { 
      return mb_convert_encoding(pack('H*', $matches[1]), 'UTF-8', 'UTF-16'); 
     }, $val); 
} 
+0

Ngay cả khi điều này đến gần, điều này là sai về mặt kỹ thuật. Ngoài ra PHP 5.4 có lỗi ở đây, xem [PHP Bug # 62010 json_decode tạo ra các chuỗi byte không hợp lệ] (https://bugs.php.net/bug.php?id=62010) – hakre

+0

Điều này không hoạt động – user1775671

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