Share Cắt ngắn đoạn văn bản với PHP

filiallion

Administrator
Staff member
Administrator
Messages
585
Points
10
Language
Tiếng Việt
Khi các bạn lập trình nội dung trang web thì thường có trường hợp cắt ngắn một đoạn văn bản theo một số lượng ký tự nhất định để đảm bảo nội dung không phá vỡ giao diện trang web.

Với PHP thì có một số hàm như substr, mb_substr thực hiện việc cắt chuỗi nhưng những hàm này thì lại cắt một cách cứng nhắc tức bạn qui định chiều dài bao nhiêu thì hàm sẽ cắt đúng với chiều dài đó mà không cần quan tâm đang cắt ở đâu, có khi là cắt ngay giữa một từ làm nội dung trang web không được chuyên nghiệp.

Để giải quyết vấn đề đó, tôi chia sẻ với các bạn một hàm thực hiện chức năng cắt chuỗi hợp lý hơn như sau:
PHP:
<?php
function truncate($string, $length, $subfix = '...')
{
    //Đếm độ dài chuỗi
    $stringLength = strlen($string);
   
    //Kiểm tra nếu độ dài chuỗi lớn hơn độ dài yêu cầu cắt thì xử lý tiếp
    if ($length < $stringLength) {
        $space = strpos($string, ' ', $length);
        $tab = strpos($string, "\t", $length);
        $lineFeed = strpos($string, "\n", $length);
       
        if ($space === false) {
            $space = 1000000;
        }
       
        if ($tab === false) {
            $tab = 1000000;
        }
       
        if ($lineFeed === false) {
            $lineFeed = 1000000;
        }
       
        $length = min($space, $tab, $lineFeed);
       
        if ($length < $stringLength) {
            $string = substr($string, 0, $length) . $subfix;
        }
    }
   
    //Trả kết quả
    return $string;
}
Ví dụ, để cắt chuỗi "Chào mừng các bạn đến với website Gextend" với độ dài cần cắt là 16 thì các bạn chạy thử với 3 hàm substr, mb_substr và hàm truncate tôi cung cấp ở trên để thấy sự khác biệt:
PHP:
echo substr('Chào mừng các bạn đến với website Gextend', 0, 16);
echo '<br>';
echo mb_substr('Chào mừng các bạn đến với website Gextend', 0, 16);
echo '<br>';
echo truncate('Chào mừng các bạn đến với website Gextend', 16);
 
Back
Top