Hướng dẫn php truncate string if too long - php cắt ngắn chuỗi nếu quá dài

Bạn cũng có thể đạt được trang trí mong muốn theo cách này:

mb_strimwidth("Hello World", 0, 10, "...");

Where:

  • Hello World: Chuỗi để cắt.
  • 0: Số lượng ký tự từ đầu chuỗi.
  • 10: Độ dài của chuỗi được cắt.
  • ...: Một chuỗi được thêm vào ở cuối chuỗi được cắt.

Điều này sẽ trở lại Hello W....

Lưu ý rằng 10 là độ dài của chuỗi bị cắt + chuỗi được thêm vào!

Tài liệu: http://php.net/manual/en/function.mb-strimwidth.php

Để tránh các từ ngắn:

Trong trường hợp trình bày các trích đoạn văn bản, có lẽ nên tránh một từ nên tránh. Nếu không có yêu cầu khó khăn về độ dài của văn bản bị cắt ngắn, ngoài wordwrap() được đề cập ở đây, người ta có thể sử dụng phần sau để cắt ngắn và ngăn chặn từ cuối cùng.

$text = "Knowledge is a natural right of every human being of which no one
has the right to deprive him or her under any pretext, except in a case where a
person does something which deprives him or her of that right. It is mere
stupidity to leave its benefits to certain individuals and teams who monopolize
these while the masses provide the facilities and pay the expenses for the
establishment of public sports.";

// we don't want new lines in our preview
$text_only_spaces = preg_replace('/\s+/', ' ', $text);

// truncates the text
$text_truncated = mb_substr($text_only_spaces, 0, mb_strpos($text_only_spaces, " ", 50));

// prevents last word truncation
$preview = trim(mb_substr($text_truncated, 0, mb_strrpos($text_truncated, " ")));

Trong trường hợp này, $preview sẽ là "Knowledge is a natural right of every human being".

Ví dụ về mã trực tiếp: http://sandbox.onlinephpfunces.com/code/25484a8b687d1f5ad93f62082b6379662a6b4713

Một vấn đề phổ biến khi tạo các trang web động (trong đó nội dung có nguồn gốc từ cơ sở dữ liệu, hệ thống quản lý nội dung hoặc nguồn bên ngoài như nguồn cấp RSS) là văn bản đầu vào có thể quá dài và khiến bố cục trang 'ngắt'.

Một giải pháp là cắt ngắn văn bản để nó phù hợp với trang. Điều này nghe có vẻ đơn giản, nhưng thường thì kết quả không như mong đợi do các từ và câu bị cắt ở những điểm không phù hợp.

Giới hạn hoặc cắt các chuỗi bằng cách sử dụng PHP

Đây là một chức năng đơn giản để tránh những cạm bẫy thông thường và mang lại sự linh hoạt trong định dạng:

$text = "Knowledge is a natural right of every human being of which no one
has the right to deprive him or her under any pretext, except in a case where a
person does something which deprives him or her of that right. It is mere
stupidity to leave its benefits to certain individuals and teams who monopolize
these while the masses provide the facilities and pay the expenses for the
establishment of public sports.";

// we don't want new lines in our preview
$text_only_spaces = preg_replace('/\s+/', ' ', $text);

// truncates the text
$text_truncated = mb_substr($text_only_spaces, 0, mb_strpos($text_only_spaces, " ", 50));

// prevents last word truncation
$preview = trim(mb_substr($text_truncated, 0, mb_strrpos($text_truncated, " ")));
0

Đối với các ví dụ dưới đây, chúng tôi sử dụng đoạn sau bao gồm bốn câu có độ dài khác nhau:

$text = "Knowledge is a natural right of every human being of which no one
has the right to deprive him or her under any pretext, except in a case where a
person does something which deprives him or her of that right. It is mere
stupidity to leave its benefits to certain individuals and teams who monopolize
these while the masses provide the facilities and pay the expenses for the
establishment of public sports.";

// we don't want new lines in our preview
$text_only_spaces = preg_replace('/\s+/', ' ', $text);

// truncates the text
$text_truncated = mb_substr($text_only_spaces, 0, mb_strpos($text_only_spaces, " ", 50));

// prevents last word truncation
$preview = trim(mb_substr($text_truncated, 0, mb_strrpos($text_truncated, " ")));
1

Cắt ngắn vào giờ nghỉ

Hành động mặc định là phá vỡ trong lần đầu tiên "." Sau $ giới hạn ký tự và sau đó pad với "...". Điều đó có nghĩa là đầu ra sẽ luôn dài hơn các ký tự $ giới hạn, nhưng chỉ xa như ký tự $ break tiếp theo. Xa hơn nữa, bạn có thể tìm thấy một hàm trả về một chuỗi luôn ngắn hơn $ giới hạn.after $limit characters and then pad with "...". That means that the output will always be longer than $limit characters, but only as far as the next $break character. Further down the page you can find a function that returns a string that is always shorter than $limit.

$text = "Knowledge is a natural right of every human being of which no one
has the right to deprive him or her under any pretext, except in a case where a
person does something which deprives him or her of that right. It is mere
stupidity to leave its benefits to certain individuals and teams who monopolize
these while the masses provide the facilities and pay the expenses for the
establishment of public sports.";

// we don't want new lines in our preview
$text_only_spaces = preg_replace('/\s+/', ' ', $text);

// truncates the text
$text_truncated = mb_substr($text_only_spaces, 0, mb_strpos($text_only_spaces, " ", 50));

// prevents last word truncation
$preview = trim(mb_substr($text_truncated, 0, mb_strrpos($text_truncated, " ")));
2

Thế giới rộng rãi. Khi người bình thường của bạn trên đường phố đề cập đến Internet, họ thường nghĩ về World Wide Web. Web về cơ bản là một loạt các tài liệu được chia sẻ với thế giới được viết bằng ngôn ngữ mã hóa có tên là Ngôn ngữ đánh dấu HYPER hoặc HTML. Khi bạn thấy một trang web, như thế này, bạn đã tải xuống một tài liệu từ một máy tính khác đã được thiết lập như một máy chủ web. (không bị cắt ngắn)

$text = "Knowledge is a natural right of every human being of which no one
has the right to deprive him or her under any pretext, except in a case where a
person does something which deprives him or her of that right. It is mere
stupidity to leave its benefits to certain individuals and teams who monopolize
these while the masses provide the facilities and pay the expenses for the
establishment of public sports.";

// we don't want new lines in our preview
$text_only_spaces = preg_replace('/\s+/', ' ', $text);

// truncates the text
$text_truncated = mb_substr($text_only_spaces, 0, mb_strpos($text_only_spaces, " ", 50));

// prevents last word truncation
$preview = trim(mb_substr($text_truncated, 0, mb_strrpos($text_truncated, " ")));
3

Thế giới rộng rãi. Khi người bình thường của bạn trên đường phố đề cập đến Internet, họ thường nghĩ về World Wide Web. Web về cơ bản là một loạt các tài liệu được chia sẻ với thế giới được viết bằng ngôn ngữ mã hóa có tên là Ngôn ngữ đánh dấu siêu văn bản hoặc HTML ...

$text = "Knowledge is a natural right of every human being of which no one
has the right to deprive him or her under any pretext, except in a case where a
person does something which deprives him or her of that right. It is mere
stupidity to leave its benefits to certain individuals and teams who monopolize
these while the masses provide the facilities and pay the expenses for the
establishment of public sports.";

// we don't want new lines in our preview
$text_only_spaces = preg_replace('/\s+/', ' ', $text);

// truncates the text
$text_truncated = mb_substr($text_only_spaces, 0, mb_strpos($text_only_spaces, " ", 50));

// prevents last word truncation
$preview = trim(mb_substr($text_truncated, 0, mb_strrpos($text_truncated, " ")));
4

Thế giới rộng rãi. Khi người bình thường của bạn trên đường phố đề cập đến Internet, họ thường nghĩ về World Wide Web ...

Cắt ngắn khi phá vỡ từ

Nếu văn bản của bạn bao gồm các câu dài hoặc bạn cần kiểm soát chính xác độ dài thì phá vỡ không gian có thể tốt hơn. Một số sự rõ ràng bị mất khi các câu bị phá vỡ, nhưng ít nhất các từ vẫn còn nguyên vẹn.

$text = "Knowledge is a natural right of every human being of which no one
has the right to deprive him or her under any pretext, except in a case where a
person does something which deprives him or her of that right. It is mere
stupidity to leave its benefits to certain individuals and teams who monopolize
these while the masses provide the facilities and pay the expenses for the
establishment of public sports.";

// we don't want new lines in our preview
$text_only_spaces = preg_replace('/\s+/', ' ', $text);

// truncates the text
$text_truncated = mb_substr($text_only_spaces, 0, mb_strpos($text_only_spaces, " ", 50));

// prevents last word truncation
$preview = trim(mb_substr($text_truncated, 0, mb_strrpos($text_truncated, " ")));
5

Thế giới rộng rãi. Khi người bình thường của bạn trên đường phố đề cập đến Internet, họ thường nghĩ về World Wide Web. Web về cơ bản là một loạt các tài liệu được chia sẻ với thế giới được viết bằng ngôn ngữ mã hóa có tên là Ngôn ngữ đánh dấu HYPER hoặc HTML. Khi bạn thấy một trang web, như thế này ...

$text = "Knowledge is a natural right of every human being of which no one
has the right to deprive him or her under any pretext, except in a case where a
person does something which deprives him or her of that right. It is mere
stupidity to leave its benefits to certain individuals and teams who monopolize
these while the masses provide the facilities and pay the expenses for the
establishment of public sports.";

// we don't want new lines in our preview
$text_only_spaces = preg_replace('/\s+/', ' ', $text);

// truncates the text
$text_truncated = mb_substr($text_only_spaces, 0, mb_strpos($text_only_spaces, " ", 50));

// prevents last word truncation
$preview = trim(mb_substr($text_truncated, 0, mb_strrpos($text_truncated, " ")));
6

Thế giới rộng rãi. Khi người bình thường của bạn trên đường phố đề cập đến Internet, họ thường nghĩ về World Wide Web. Web về cơ bản là một loạt các tài liệu được chia sẻ với thế giới được viết ...

$text = "Knowledge is a natural right of every human being of which no one
has the right to deprive him or her under any pretext, except in a case where a
person does something which deprives him or her of that right. It is mere
stupidity to leave its benefits to certain individuals and teams who monopolize
these while the masses provide the facilities and pay the expenses for the
establishment of public sports.";

// we don't want new lines in our preview
$text_only_spaces = preg_replace('/\s+/', ' ', $text);

// truncates the text
$text_truncated = mb_substr($text_only_spaces, 0, mb_strpos($text_only_spaces, " ", 50));

// prevents last word truncation
$preview = trim(mb_substr($text_truncated, 0, mb_strrpos($text_truncated, " ")));
7

Thế giới rộng rãi. Khi người bình thường của bạn trên đường phố đề cập đến Internet, họ thường nghĩ ...

Bạn sẽ nhận thấy rằng độ dài văn bản cuối cùng bây giờ gần với các ký tự $ giới hạn, điều này có ý nghĩa vì có rất nhiều không gian trong văn bản thông thường so với các thời kỳ.

Cắt ngắn đến chiều dài tối đa

Như đã lưu ý trước đây, hàm được trình bày ở trên sẽ luôn trả về một chuỗi dài hơn một chút so với các ký tự giới hạn $, cho đến ký tự $ break tiếp theo. Đối với những người có yêu cầu chặt chẽ hơn, đây là một chức năng thay thế sẽ cắt văn bản thành ký tự $ break trước đó thay vì sau $ giới hạn:before rather than after $limit:

$text = "Knowledge is a natural right of every human being of which no one
has the right to deprive him or her under any pretext, except in a case where a
person does something which deprives him or her of that right. It is mere
stupidity to leave its benefits to certain individuals and teams who monopolize
these while the masses provide the facilities and pay the expenses for the
establishment of public sports.";

// we don't want new lines in our preview
$text_only_spaces = preg_replace('/\s+/', ' ', $text);

// truncates the text
$text_truncated = mb_substr($text_only_spaces, 0, mb_strpos($text_only_spaces, " ", 50));

// prevents last word truncation
$preview = trim(mb_substr($text_truncated, 0, mb_strrpos($text_truncated, " ")));
8

Lưu ý rằng giá trị mặc định cho $ break đã thay đổi thành ký tự không gian. Sử dụng "." Nhân vật là điểm dừng bây giờ nguy hiểm vì chỉ có thể có một hoặc hai câu trong văn bản của bạn và bạn có thể kết thúc với rất ít từ còn lại.

Ở đây bạn có thể thấy đầu ra của chức năng mới này:

$text = "Knowledge is a natural right of every human being of which no one
has the right to deprive him or her under any pretext, except in a case where a
person does something which deprives him or her of that right. It is mere
stupidity to leave its benefits to certain individuals and teams who monopolize
these while the masses provide the facilities and pay the expenses for the
establishment of public sports.";

// we don't want new lines in our preview
$text_only_spaces = preg_replace('/\s+/', ' ', $text);

// truncates the text
$text_truncated = mb_substr($text_only_spaces, 0, mb_strpos($text_only_spaces, " ", 50));

// prevents last word truncation
$preview = trim(mb_substr($text_truncated, 0, mb_strrpos($text_truncated, " ")));
9

Thế giới rộng rãi. Khi người bình thường của bạn trên đường phố đề cập đến Internet, họ thường nghĩ về World Wide Web. Web về cơ bản là một loạt các tài liệu được chia sẻ với thế giới được viết bằng ngôn ngữ mã hóa có tên là Ngôn ngữ đánh dấu siêu văn bản hoặc HTML ...

Hello World0

Thế giới rộng rãi. Khi người bình thường của bạn trên đường phố đề cập đến Internet, họ thường nghĩ về World Wide Web ...

Hello World1

Thế giới trên toàn thế giới ...

Cắt ngắn bằng lời nói

Nếu bạn chỉ muốn cắt văn bản thành một số từ nhất định, thì bạn không cần bất kỳ hàm ưa thích nào, mã bên dưới sẽ thực hiện thủ thuật:

Hello World2

Nói cách khác, khớp với tối đa 10 lần xuất hiện của 'một hoặc nhiều ký tự không phải là không gian theo sau là các ký tự khoảng trắng bằng không hoặc nhiều hơn':

Thế giới rộng rãi. Khi người bình thường của bạn trên (10 từ)

Để biết thêm thông tin về văn bản xử lý, gói văn bản để phù hợp với cột hoặc chia đều nội dung trên hai hoặc nhiều cột, hãy xem bài viết liên quan về gói từ.

Một giải pháp thay thế đã được cung cấp bởi Bakaburg (xem Phản hồi). Đây là cùng một giải pháp được đóng gói thành một hàm:Bakaburg (see Feedback). Here is the same solution packaged into a function:

Hello World3

Việc sử dụng phải khá đơn giản:

Hello World4

Thế giới rộng rãi. Khi người bình thường của bạn trên ...

Chắc chắn, chúng tôi còn lại chỉ với 10 từ đầu tiên của văn bản. Lưu ý rằng chúng tôi đã đặt các dấu phân cách mặc định cho Strtok thành một khoảng không gian hoặc ngắt dòng. Bạn có thể thêm các ký tự khác vào tập hợp này theo yêu cầu, nhưng không phải là biểu thức chính quy như trong giải pháp trước.

Khôi phục thẻ trong HTML bị cắt ngắn

Rất nhiều người đã đặt câu hỏi về cách đối phó với các thẻ HTML trong văn bản bị cắt ngắn. Rõ ràng cách tiếp cận đơn giản nhất là xóa bất kỳ thẻ nào khỏi chuỗi để bị cắt ngắn, nhưng điều đó không phải lúc nào cũng đủ tốt cho các ứng dụng trong thế giới thực nơi định dạng là quan trọng.

Hàm này chấp nhận một chuỗi chứa các thẻ HTML và sẽ cố gắng tự động đóng bất kỳ thẻ nào đã bị mở. Có một giả định ở đây rằng HTML có hiệu lực trước khi nó bị cắt ngắn, vì vậy tất cả các thẻ đã được mở và đóng theo thứ tự hợp lệ:

Hello World5

Xin lưu ý: Chức năng này là thử nghiệm, vì vậy vui lòng sử dụng nó một cách thận trọng và đưa ra phản hồi bằng cách sử dụng liên kết phản hồi ở cuối trang. Nếu bạn đã tìm thấy một trường hợp nó không hoạt động, vui lòng cung cấp một ví dụ để chúng tôi có thể kiểm tra nó. This function is experimental so please use it with caution and give feedback using the Feedback link at the bottom of the page. If you've found a case where it doesn't work, please provide an example so we can check it out.

Cả tập lệnh cắt ngắn cũng như hàm trên để khôi phục các thẻ HTML đều được thiết kế để xử lý văn bản có chứa các thẻ hình ảnh hoặc siêu liên kết. Chúng được thiết kế đơn giản để cắt các thẻ văn bản đơn giản và HTML mà không có bất kỳ thuộc tính nào. Để biết một giải pháp toàn diện hơn, hãy xem các liên kết dưới đây.plain text and HTML tags without any attributes. For a more comprehensive solution see the links below.

Ví dụ làm việc

Bạn có thể sử dụng biểu mẫu bên dưới để xem cách thức hoạt động của hàm cắt ngắn (MyTrunCate) - với tùy chọn bổ sung để đóng bất kỳ thẻ HTML mở nào (hàm Restoretags).

Người giới thiệu

  • PHP: Chức năng chuỗi
  • Blog PHP đơn giản hiện sử dụng chức năng này
  • HTML buộc văn bản đầu vào thành chữ hoa Forcing INPUT text to uppercase
  • Nội dung JavaScript HTML mở rộng trên nhấp chuột HTML content that expands on click
  • JavaScript có thể thu gọn các thùng chứa với hỗ trợ xoay vòng Collapsible containers with rotation support
  • Văn bản phptruncating Truncating Text
  • Bán từ PHP Word Wrapping

< PHP

Đăng bình luận hoặc câu hỏi của bạn