Đập vào bóng tối:một số hàng trong cơ sở dữ liệu của bạn chứa các ký tự không phải ASCII (ví dụ:ü, é, v.v.). Kết nối cơ sở dữ liệu của bạn được đặt thành latin1
, vì vậy dữ liệu không được mã hóa UTF-8. json_encode
yêu cầu dữ liệu được mã hóa UTF-8. Nếu bạn tìm nạp đủ hàng, sẽ có các hàng có dữ liệu không phải UTF-8 như vậy trong đó và json_encode
không thành công. Với đủ ít hàng, bạn sẽ không gặp phải những hàng có vấn đề đó.
Kiểm tra điều này bằng cách xuất ra echo json_last_error_msg();
sau json_encode
.
Đặt kết nối cơ sở dữ liệu của bạn thành UTF-8. Xem cách thực hiện tại đây: UTF-8 hoàn toàn thông qua
Lý do tại sao trình duyệt của bạn phàn nàn về JSON không hợp lệ khi bạn bao gồm print_r
rất đơn giản:bởi vì sau đó PHP tạo ra rất nhiều rác không phải là JSON, mà trình duyệt không thể giải mã thành JSON.