确保PHP substr完成单词而不是字符

Coo*_*uke 55 php substring

我知道如何使用substr函数,但是这将很快结束一个单词的中间字符串.我希望字符串在一个单词的结尾处结束我将如何进行此操作?它会涉及正则表达吗?任何帮助非常感谢.

这就是我到目前为止所拥有的.只是SubStr ......

echo substr("$body",0,260);
Run Code Online (Sandbox Code Playgroud)

干杯

Ach*_*har 130

substr($body, 0, strpos($body, ' ', 260))
Run Code Online (Sandbox Code Playgroud)

  • 如果文本短于260个字符,使用此选项可以生成一个strpos警告. (14认同)
  • 使用mb_substr()的@Tony可以为UTF-8提供技巧. (3认同)
  • 这有很多问题.如上所述,如果字符串小于260个字符长度,或者它不包含任何空格,则会失败.它也不会将字符串限制为260个字符,而是在*260个字符后的空格*处打破字符串,这通常不是您想要的.如果单词分隔符是不同类型的空格(如制表符或换行符),它也不起作用.它也不是多字节兼容的.Paul Dixon的preg_match()解决方案是一个更好的解决方案. (3认同)

Pau*_*xon 99

它可以用正则表达式完成,这样的东西从字符串的开头到字边界最多可以有260个字符:

$line=$body;
if (preg_match('/^.{1,260}\b/s', $body, $match))
{
    $line=$match[0];
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用wordwrap函数将$ body分解为行,然后只提取第一行.

  • 尝试使用/ u修饰符匹配UTF-8,例如`/ ^.{1,260}\b/su` (8认同)
  • UTF8呢?我对正则表达式很糟糕。 (2认同)

Zed*_*Zed 29

你可以试试这个:

   $s = substr($string, 0, 261);
   $result = substr($s, 0, strrpos($s, ' '));
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的答案!与@achshar 解决方案相反,该解决方案允许在不超过字数限制的情况下保留整个单词。关键是使用 `strrpos` 函数在前 261 个字符中查找最后一个空格,返回该位置,然后使用 `substr` 在该位置对字符串进行切片。请记住将所有内容包含在 `if` 语句中,以便仅在文本大于 260 个字符时应用函数。 (6认同)

Gum*_*mbo 12

你可以这样做:找到第260个字符的第一个空格,并将其用作裁剪标记:

$pos = strpos($body, ' ', 260);
if ($pos !== false) {
    echo substr($body, 0, $pos);
}
Run Code Online (Sandbox Code Playgroud)


小智 5

自动换行并爆炸然后第一个数组元素就是你想要的 $wr=wordwrap($text,20,':'); $strs=explode(":",$wr); $strs[0]

  • 我认为这是最干净的解决方案,即使是单行 - `echoexplode('||',wordwrap($text,20,'||'))[0]` (3认同)