2011-12-13 73 views
13

Tôi có một số chuỗi trong mã PHP của mình cần được cắt ngắn nếu chúng quá dài.Làm thế nào để cắt ngắn chuỗi UTF8 trong PHP?

Ví dụ, nếu một văn bản là một cái gì đó như thế này:

Xin chào, tôi muốn nói với bạn như thế nào tuyệt vời này là.

Nó sẽ thay thế nó với điều này:

Xin chào, tôi muốn ...

Cho rằng tôi đã thực hiện một đơn giản substr. Vấn đề là trong UTF8 một số ký tự thực sự dài hai ký tự. Và tôi đã có một số vấn đề với một nhân vật bị cắt ở giữa: Ví dụ, khi tôi cố gắng chèn chuỗi sửa đổi trong cơ sở dữ liệu, nó bị treo.

Đây là chức năng hiện tại của tôi:

static function short($string, $max = 255){ 
    if(strlen($string) >= $max){ 
     $string = substr($string, 0, $max - 5).'...'; 
    } return $string; 
} 

có ai biết một cách để làm cho công việc chức năng này ngay cả đối với các nhân vật UTF8?

+0

Tại sao '$ max - 5'? – deceze

+0

có thể xem tại địa chỉ 'https: //api.drupal.org/api/drupal/includes! Unicode.inc/function/truncate_utf8/7' –

+0

có thể trùng lặp của [chức năng cắt tương thích UTF-8] (http: // stackoverflow .com/questions/6288875/utf-8-compatible-truncate-function) – user

Trả lời

7

thử với mb_substr():

static function short($string, $max = 255){ 
    if(mb_strlen($string, 'utf-8') >= $max){ 
     $string = mb_substr($string, 0, $max - 5, 'utf-8').'...'; 
    } return $string; 
} 
+0

-1 Tại sao không phải là đa byte nhận thức 'strlen'? – deceze

+0

@deceze - bạn nói đúng, thx để chỉ ra điều đó - tôi đã chỉnh sửa mã sao chép/dán –

Các vấn đề liên quan