Hôm nay quả là ngày đen thui của Jam khi cả buổi chiều 4 tiếng đồng hồ chỉ fixed cái lỗi cực kì đơn giản trong PHP và MySQL, đó là các kí tự không hợp lệ UTF-8 trong mảng ARRAY !

Vấn đề không phải ở chỗ đó, mà ở chỗ khi lỗi không lưu vào cơ sở dữ liệu, do Class dài nên Jam cứ phải test lần lượt các chỗ, dump nó ra không được thì dùng hàm _Watch_dog() để lưu lỗi vào file rồi nghiên cứu nên nó mới lâu, sau khi lần ra vấn đề ở chỗ này:

Ai đó muốn lưu một mảng vào trong MySQL thì cần phải dùng hàm Serialize() để chuỗi hóa mảng, sau đó lưu vào trong MySQL dưới dạng Text, sau khi muốn dùng thì lấy kết quả ra và dùng hàm Unserialize() để giải mã nó, tuy nhiên trường hợp trong mảng có xuất hiên một vài kí tự UTF8 không hợp lệ, thì chúng trả về FALSE làm cho mình cứ bực mình mãi !

Một số người khác khuyên nên sử dụng JSON_ENCODE() để mã hóa nó, tuy nhiên vấn đề vẫn là FALSE.

Một số người khác nói nên thêm addslashes() vào để nó Escape các dấu QUOTE nhưng vẫn không ăn thua !

Một số người khác bảo nên dùng utf8_encode() nhưng vẫn không ăn thua ! DO mảng quá phức tạp, Jam lục lọi trên mạng thì thấy có cách này hay, sử dụng hàm utf8_encode() cả mảng như sau:

function utf8_string_array_encode(&$array){
    $func = function(&$value,&$key){
        if(is_string($value)){
            $value = utf8_encode($value);
        }
        if(is_string($key)){
            $key = utf8_encode($key);
        }
        if(is_array($value)){
            utf8_string_array_encode($value);
        }
    };
    array_walk($array,$func);
    return $array;
}

Như vậy, cần phải lọc các kí tự không hợp lệ trước, sau đó dùng hàm SERIALIZE() như thường, nếu muốn dùng có thể sử dụng hàm giải ngược là UNSERIALIZE() để khôi phục mảng !

Đây là cách không mấy hay ho vì có thể bị hack thông qua mảng nào đó, các bạn nên sử dụng Json_encode() tuy nhiên chúng nặng gấp đôi serialize() cho nên hãy cân nhắc khi dùng !

Chúc các bạn thành công !

Tôi là Jam, thâm niên 7 năm thiết kế website và làm seo, nếu các bạn thấy bài viết hay thì hãy chia sẻ cho những người khác cùng tham khảo, còn nếu muốn thiết kế website hoặc sửa web hay đặt một plugin có chức năng đặc biệt, hãy liên hệ ngay tới Jam ( thông tin ở chân trang )

Bài viết liên quan

Trả lời

Thư điện tử của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Lưu ý: Không đăng thông tin cá nhân của bạn như email hay số điện thoại để không bị quấy rầy, tham khảo thêm quy định khi comment !