2010-08-17 20 views
11

Hiện nay, phương pháp tôi sử dụng để cắt dây là: echo substr($message, 0, 30)."..";PHP: đúng cắt bỏ dây với ".."

Làm thế nào để hiển thị các dấu chấm duy nhất trong trường hợp đó, chuỗi đã được cắt ngắn?

+0

Tại sao hai dấu chấm thay cho ba thông thường? Không phải mọi độ lệch từ định mức đều tốt. Nếu bạn quan tâm đến ký tự "bị mất", bạn có thể có hình elip hyperbol (đó là ba dấu chấm được gọi) trong ký tự * một *, nhờ Unicode: '…' (cố gắng chọn nó bằng chuột, bạn sẽ thấy rằng nó thực sự chỉ có một nhân vật). –

+0

Ngoài ra, dấu ba chấm hyperbol không phải là ba dấu chấm hoặc dấu chấm. Dấu ba chấm là một thực thể hoàn toàn riêng biệt và không nên được thay thế bằng ba chấm, vì cả hai đều có các thuộc tính khác nhau làm ký tự và cũng có khoảng cách khác nhau trong văn bản. Sử dụng ký tự dấu ba chấm thực tế để thay thế. – junkfoodjunkie

Trả lời

15

Chỉ cần kiểm tra độ dài để xem nếu nó là hơn 30 ký tự hay không:

if (strlen($message) > 30) 
{ 
    echo substr($message, 0, 30).".."; 
} 
else 
{ 
    echo $message; 
} 

Các nitpick typographic trong tôi có này để thêm: các ký tự chính xác để sử dụng là ellipsis trong đó bao gồm nhân vật này , ba chấm ... hoặc đối tượng HTML của nó ….

+0

Ha! Bạn đã nhanh hơn 18 giây :) – sprain

+1

+1 vì sử dụng & hellip; – fabrik

+2

(Đặc biệt là @fabrik và bất kỳ ai đã bỏ phiếu cho anh ấy :) Sử dụng các thực thể được đặt tên trong HTML sẽ không được chấp nhận - đừng làm điều đó, vì trình duyệt (hiện đại!) Sẽ bị ngắt khi sử dụng cùng với XHTML. Giải pháp tốt hơn là luôn sử dụng ký tự trực tiếp, cùng với mã hóa chính xác, tức là UTF-8 hoặc tương tự. Nhưng 1 cho việc đề cập đến biểu tượng chính xác dù sao đi nữa. –

5

Chỉ cần kiểm tra độ dài của chuỗi gốc để xem liệu chuỗi đó có cần được cắt bớt hay không. Nếu nó dài hơn 30, cắt chuỗi và thêm dấu chấm ở cuối dòng:

if (strlen($message) > 30) { 
echo substr($message, 0, 30).".."; 
} else { 
echo $message; 
} 
4
if (strlen($message) > 30) { 
    echo substr($message, 0, 30) . ".."; 
} else { 
    echo $message; 
} 
0

Thêm một điều kiện strlen()?

1

Bạn có thể làm:

echo strlen($message) > 30 ? substr($message, 0, 30) . '..' : $mssage; 

Về cơ bản, nó giống như (nhưng ngắn hơn):

if (strlen($message) > 30) { 
    echo substr($message, 0, 30) . ".."; 
} else { 
    echo $message; 
} 
+0

ngắn hơn nhưng đó là ngôn ngữ man rợ, không giống như tiếng Anh đơn giản và đơn giản 'nếu str [ing] len [gth] [của] tin nhắn hơn 30 ... ' –

+0

Đúng, nhưng tôi thích cú pháp ternary cho loại điều này. Nó ngắn hơn và quan trọng hơn. Nó cũng là kịch bản sách giáo khoa cho việc sử dụng nó (logic phân nhánh với cùng "kết quả" với cả hai nhánh) ... – ircmaxell

4

Cần lưu ý rằng strlen() chức năng không đếm ký tự, nó đếm byte. Nếu bạn đang sử dụng mã hóa UTF-8, bạn có thể kết thúc với 1 ký tự được tính là tối đa 4 byte. Cách thích hợp để thực hiện việc này sẽ giống như sau:

echo mb_strlen($message) > 30 ? mb_substr($message, 0, 30) . "..." : $message; 
Các vấn đề liên quan