Stream_get_contents thành mảng php
Nếu ai đã từng tham gia các dự án outsource cho khách hàng Nhật Bản thì đều gặp bài toán thông tin phổ biến lấy dữ liệu từ cơ sở dữ liệu và xuất ra báo cáo 6 cho người dùng. Nghe rất đơn giản, ta chỉ cần sử dụng hàm có sẵn của 7
Mã hóa, bài toán muôn thuởĐi tới các vấn đề phức tạp hơn
Lý do người Nhật vẫn sử dụng 2 chỉ gói đơn giản gọn trong 1 từ khóa Legacy. 2, 5 đều là những mã hóa tiêu chuẩn được sử dụng trước khi mà 1 trở nên phổ biến như ngày hôm nay. Ngoài ra còn một lý do nữa mình nghĩ cũng quan trọng khi mà 2 chỉ cần sử dụng mã hóa 8 trong khi 1 cần tới 0 để mã hóa tiếng Nhật nói chung và 1 nói riêng 🎃Ở đây mình có mã cơ sở như sau. Thay vì đọc dữ liệu từ cơ sở dữ liệu, chúng được hard code trong 1 mảng
Trong dữ liệu bên ngoài hàng cuối cùng chứa ký tự kép trích dẫn 3 ra thì các hàng ở trên nó hoàn toàn không chứa ký tự đó. Cần phải có lý do gì để quấn lại thế mà 😢Sau khi thử loại trừ bằng cách xóa dần các ký tự bên trong giá trị của các trường, mình phát hiện thêm 1 điều
Nhìn vào mã trên ta có thể thấy UTF-8 cần 3 byte trong khi Shift-JIS chỉ cần 2 byte cho các ký tự tiếng nhật. Tools 「ソ」=「0x8F5C」=「0x8F」+「0x5C」 「十」=「0x8f5c」=「0x8f」+「0x5c」 Sau khi đã cố gắng tìm kiếm nguyên nhân trên Google mà vẫn không cho kết quả tốt, thì quyết định cuối cùng là thử nghiệm hướng tới phương pháp 8 bên trong 9
Người giới thiệu Để đoạn ý 4 xử lý ký tự bổ sung 5 vào từng trường giá trị trên mỗi hàng-csv có điều kiện sau
Rõ ràng khi 6 được đặt giá trị mặc định 7 nó chịu điều kiện 8 vậy còn điều kiện 9 tức là sao ?
Bằng chứng để có kết quả đầu ra khác chắc chắn bên trong giá trị các trường có chứ không phải ký tự dấu gạch chéo ngược 0Test try with sample after. 1
Được rồi, đọc tới đây chắc chắn bạn đã hiểu nguyên lý hoạt động của phương thức 2 trong 3. Các cụ thể trong trường hợp này được sử dụng để kiểm tra sự có mặt của ký tự 4 trong giá trị của 5 hay không, nếu có bọc lại giá trị đó bằng dấu ngoặc kép 6Thử apply trong trường hợp ký tự 7 xem sao nhỉ 1
Dấu gạch chéo ngược ký tự 8 trong 1 xuất hiện lại trong chuỗi 7 - 2. Hóa ra 2 trong bảng ASCII lại chính là ký tự 0👉 Bảng ASCII Và có lẽ đó chính là lý do mà giá trị của các trường trong tệp 4 được bọc bởi dấu 3 một cách bất thườngVà cuối cùng đây là công việc cần ghi nhớ khi chuyển đến csv 📖 Việc cần làm rất đơn giản, chỉ cần đổi lại thứ tự thực hiện chuyển đổi mã hóa sau khi xuất định dạng CSV là được. Và việc đổi thứ tự này cũng giúp chi phí tính toán giảm đi khá nhiều vì chỉ phải thực hiện câu lệnh encode một lần duy nhất, thay vì 6 lần như phiên bản đầu tiên 3
Xuất file đúng như mong đợi 👍 💯 Chuẩn RFC 4180 & Lỗi chưa được sửaRFC 4180 một định dạng định dạng chuẩn cho tệp CSV được sử dụng để đọc CSV xuất trong rất nhiều ứng dụng, đơn cử như Bảng tính Google If ta has 1 sheet with the content after 6Thì khi chọn 7 ta sẽ lấy được nội dung file như sau 7Try to use 7 read this file coi sao 😃 8
Nguyên nhân kết quả mong đợi không đúng như mong đợi là do hàm 9 của 7 đang được sử dụng sai tiêu chuẩn RFC 4180
Edit edit back a time 1
Tuy nhiên, khi sử dụng 9 với tiêu chuẩn RFC_4180 để ghi ra tệp csv rồi sau đó sử dụng 2 để đọc lại tệp chính vừa được ghi thì kết quả lại không chính xác 4
Kết quả đọc ra dễ thấy thì dữ liệu lại trở thành 2 hàng trong khi kỳ vọng là 1 hàng mà thôi 🙃 Đây là một lỗi tồn tại trong PHP, không thể sửa được. bạn không thể coi đây là vấn đề coi. 50686 Hiện tại mình cũng không biết sửa lỗi này kiểu gì 🤣 |