在PHP中截断文本?

24

1
你对 substr() 不理解的是什么?你在哪里感到困惑?它是一个函数,根据你给定的参数返回源字符串的一部分。 - Brad
1
是的,只需使用 substr() 函数。第一个参数是你的文本,第二个参数是偏移量 - 如果设置为 0,则从开头截断;如果设置为 1、2、3...,则在那么多个字符后截断;第三个参数是应该截断的长度。例如,substr("hello world", 3, 4) 将返回 lo w - 从 3 开始的 4 个字符。 - Tony Bogdanov
可能是将多字节字符串截断为n个字符的重复问题。 - Gordon
1
关闭,因为这不是一个真正的问题?发帖人想知道如何在PHP中截断文本。现在一群猴子在决定什么是问题吗? - Lindsay
3个回答

67

最明显的做法是阅读文档

以下是帮助:substr($str, $start, $end);

$str 是你的文本。

$start 是开始截取的字符索引。在你的情况下,很可能是0,这意味着从开头开始。

$end 是截取结束的位置。例如,假设你想以15个字符结尾。你可以像这样编写:

<?php

$text = "long text that should be truncated";
echo substr($text, 0, 15);

?>

然后您将得到如下结果:

long text that 

听起来有道理?

编辑

你提供的链接是一个函数,用于在将文本截断到所需长度后查找最后一个空格,以便不会在单词中间切断。但是,它缺少一个重要的东西 - 要传递给函数的所需长度,而不总是假定您希望它为25个字符。因此,这是更新版本:

function truncate($text, $chars = 25) {
    if (strlen($text) <= $chars) {
        return $text;
    }
    $text = $text." ";
    $text = substr($text,0,$chars);
    $text = substr($text,0,strrpos($text,' '));
    $text = $text."...";
    return $text;
}

所以在你的情况下,你需要将这个函数粘贴到functions.php文件中,并像下面这样在你的页面中调用它:

$post = the_post();
echo truncate($post, 100);

这将把你的帖子裁剪到最后一个不超过100个字符的空格。显然,你可以传递任何数字而不是100。无论你需要什么。


感谢您的帮助,我正在努力理解这个。如果我表现得很蠢,请提前道歉。那么,我应该把来自我链接的网站的字符串放到类似于 functions.php 文件(我正在使用 WordPress)的东西中吗?我的意思是,我在哪里声明这个函数? - realph
substr是一个本地的php函数,所以你可以在任何地方随时调用它。除非你要扩展它,否则没有必要编写返回相同内容的函数。听起来好像你不需要这么做。例如,wordpress允许你做这样的事情:$post = the_post(); 在这里你将一个帖子的内容定义为一个变量。你可以对其进行substr操作并查看其反应。echo substr($post, 0, 100); 看看它是否返回了你的帖子的前100个字符。如果这不是你的意思,你可能需要编辑你的问题,以便更具体地描述你的确切情况。 - Kai Qing
啊,明白了!太好了!我现在正在尝试如何以“...”结束它。我会尝试自己解决,并在这里发布我的结果。再次感谢。 - realph
我已经更新了我的答案来进行解释。 - Kai Qing
10
PHP的mb_strimwidth函数与单个内置函数完全相同:mb_strimwidth($string, 0, 15, "...") - tolginho
显示剩余6条评论

7
$mystring = "this is the text I would like to truncate";

// Pass your variable to the function
$mystring = truncate($mystring);

// Truncated tring printed out;
echo $mystring;

//truncate text function
public function truncate($text) {

    //specify number fo characters to shorten by
    $chars = 25;

    $text = $text." ";
    $text = substr($text,0,$chars);
    $text = substr($text,0,strrpos($text,' '));
    $text = $text."...";
    return $text;
}

5
$text="abc1234567890";

// truncate to 4 chars

echo substr(str_pad($text,4),0,4);

这样做避免了将一个四个字符的字符串截断为十个字符的问题。(即源字符串小于所需长度)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接