PHP cắt chuỗi tiếng Việt bị lỗi

0
122

1. PHP cắt chuỗi tiếng Việt bị lỗi là như thế nào?

Khi lập trình đôi khi gặp bài toán cắt chuỗi, với chuỗi ký tự tiếng Anh không có dấu thì khá dễ dàng, nhưng với chuỗi tiếng Việt có dấu rất dễ bị lỗi.

Ví dụ: chuỗi “Công ty cổ phần”.

Anh em cắt tới ký tự chữ “cổ”. Nếu khi báo cắt theo đội dài chuỗi không may độ dài rơi đúng vào chữ “cổ”. Phần mềm cắt được chữ c và dấu ô. Lúc đó sẽ xuất ra màn hình chữ tiếng Việt sẽ bị lỗi, như hình bên dưới:

Cắt chuỗi tiếng Việt bị lỗi
PHP cắt chuỗi tiếng Việt bị lỗi – ảnh minh họa

Ký tự xuất ra màn hình không hiểu tiếng Việt “Công ty C� ***“.

// output "Công ty C� ***"

2. Khắc phục lỗi PHP cắt chuỗi tiếng Việt

Đoạn code chia sẻ bên dưới không phải của nhantam mà qua tìm kiếm trên internet nhantam tìm thấy từ một diễn đàn do một developer chia sẻ, đã code đã giải quyết được vấn đề “PHP cắt chuỗi tiếng Việt bị lỗi“, nên post lại lên đây cho anh em cùng tham khảo:

function substr_vietnamese($str, $len, $more='') {
    if ($str=="" || $str==NULL) return $str;

    if (is_array($str)) return $str;

    $str = trim($str);
    if (strlen($str) <= $len) return $str;

    $str = substr($str,0,$len);
    if ($str != "") {
        if (!substr_count($str," ")) {
            if ($more) $str .= " ...";
            return $str;
        }
        while(strlen($str) && ($str[strlen($str)-1] != " ")) {
            $str = substr($str,0,-1);
        }

        $str = substr($str,0,-1);
        if ($more) $str .= " ...";
    }

    return $str;
}

Mạn phép tác giả đổi tên hàm từ “function cut_string” thành “function substr_vietnamese” để gợi nhớ.

Các bạn tham khảo nguồn tại link: https://code24h.com/cat-chuoi-co-su-dung-tieng-viet-php-qd34105.htm

Test:

$str = "Công ty Cổ phần"
echo substr_vietnamese($str, 14, "***")

Nếu anh em có giải pháp nào khác xin chia sẻ vào comment bên dưới để cùng học tập và lao động tốt {~!~}

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

nhantam
Lập trình web app tại Panpic

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây

52 − 46 =