Không lưu được tiếng Việt có dấu khi dùng strtolower và strtoupper trong laravel

Rồi một ngày bạn sẽ gặp một cái lỗi như hình dưới khi lưu tiếng Việt có dấu vào database trong laravel như tôi đã gặp.



Tôi đã từng lên diễn đàn về laravel tiếng Việt và tiếng Anh để nhờ khắc phục, nhưng nhận về những chỉ dẫn như bạn đổi "Collation" sang utf-8 đi... hay thậm chí là những bình luận và thả icon mỉa mai như kiểu "ôi mày ngu quá con ạ :)". 

Nói thật nhiều ông cứ nghĩ cái đứa đi hỏi động cái là lên hỏi luôn hay sao ấy, người đi hỏi người ta đã google thiếu điều muốn mòn bàn phím những mãi cũng chã ra được nên mới đi hỏi thôi, chứ chã ai muốn người khác biết hay xem mình là thằng ngu cả.

Và sau gần cả tháng tìm kiếm và test đi test lại thì cuối cùng mình đã phát hiện ra lý do vì sao mình gặp lỗi này. Và hôm nay mình sẽ chia sẽ lại ở đây để có thể tra lại khi lỡ có quên hoặc cho bạn nào đó mới học laravel vô tình chạm phải lỗi này mà còn có thể giải quyết được vấn đề đơn giản này.

Thói quen khi mới viết code mình thường sử dụng tiếng Việt không dấu để nhập liệu nên mọi thứ đều rất ngon ngẻ và rồi khi chuyển sang tiếng Việt có dấu thì mọi chuyện đã xãy ra. Và lý do là bởi mình sử dụng strtolower và strtoupper để làm đẹp lại dữ liệu trước khi lưu vào database.

Cách khắc phục tình trạng không lưu được tiếng Việt có dấu khi sử dụng strtolower và strtoupper trong laravel

Khắc phục trong trường hợp là tiếng Việt có dấu:

Bạn sử dụng mb_strtolower hoặc mb_strtoupper để thay thế cho strtolower và strtoupper như vẫn thường hay sử dụng.

Ví dụ:

<?php
$str 
"Hôm Nay trời Nhẹ lên cao, tôi buồn không hiểu vì SAO tôi buồn";
$str mb_strtolower($str);
echo 
$str// Prints hôm nay trời nhẹ lên cao, tôi buồn không hiểu vì sao tôi buồn
?>

Khắc phục trong trường hợp ngôn ngữ không phải hệ là tinh như tiếng Trung, tiếng Hàn, ....

Bạn vẫn thêm vào trước strtolower và strtoupper tiền tố mb_ nhưng cấu trúc có chút thay đổi là thêm UTF-8 vào trong như ví dụ dưới đây.

Ví dụ

<?php
$str 
"Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός";
$str mb_strtolower($str'UTF-8');
echo 
$str// Prints τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός
?>

Chỉ là một thay đổi chút xíu thôi nhưng tìm trên google là cả một chuỗi ngày mệt mỏi. Hy vọng bài viết này sẽ góp thêm một chút xíu vào khối khổng lồ google cho ai gặp phải có thể dễ dàng tìm ra nó để khắc phục lỗi không lưu được tiếng Việt có dấu trong laravel


Đăng nhận xét (0)
Mới hơn Cũ hơn