如何在PHP中删除20个字后的字符串?
答案 0 :(得分:123)
function limit_text($text, $limit) {
if (str_word_count($text, 0) > $limit) {
$words = str_word_count($text, 2);
$pos = array_keys($words);
$text = substr($text, 0, $pos[$limit]) . '...';
}
return $text;
}
echo limit_text('Hello here is a long sentence blah blah blah blah blah hahahaha haha haaaaaa', 5);
输出:
Hello here is a long ...
答案 1 :(得分:26)
将数字3
更改为下面的数字20
以获取前20个字,或将其作为参数传递。以下演示了如何获取前3个字:(因此将3
更改为20
以更改默认值):
function first3words($s, $limit=3) {
return preg_replace('/((\w+\W*){'.($limit-1).'}(\w+))(.*)/', '${1}', $s);
}
var_dump(first3words("hello yes, world wah ha ha")); # => "hello yes, world"
var_dump(first3words("hello yes,world wah ha ha")); # => "hello yes,world"
var_dump(first3words("hello yes world wah ha ha")); # => "hello yes world"
var_dump(first3words("hello yes world")); # => "hello yes world"
var_dump(first3words("hello yes world.")); # => "hello yes world"
var_dump(first3words("hello yes")); # => "hello yes"
var_dump(first3words("hello")); # => "hello"
var_dump(first3words("a")); # => "a"
var_dump(first3words("")); # => ""
答案 2 :(得分:11)
截断到目标角色的最近前空格。 Demo
$str
要截断的字符串$chars
要剥离的字符数量可以被$to_space
$to_space
boolean
是否要从$chars
限制附近的空格中截断<强> 功能 强>
function truncateString($str, $chars, $to_space, $replacement="...") {
if($chars > strlen($str)) return $str;
$str = substr($str, 0, $chars);
$space_pos = strrpos($str, " ");
if($to_space && $space_pos >= 0)
$str = substr($str, 0, strrpos($str, " "));
return($str . $replacement);
}
<强> 示例 强>
<?php
$str = "this is a string that is just some text for you to test with";
print(truncateString($str, 20, false) . "\n");
print(truncateString($str, 22, false) . "\n");
print(truncateString($str, 24, true) . "\n");
print(truncateString($str, 26, true, " :)") . "\n");
print(truncateString($str, 28, true, "--") . "\n");
?>
this is a string tha...
this is a string that ...
this is a string that...
this is a string that is :)
this is a string that is--
答案 3 :(得分:8)
使用explode()。
来自文档的示例。
// Example 1
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2
请注意,explode具有限制功能。所以你可以做类似
的事情$message = implode(" ", explode(" ", $long_message, 20));
答案 4 :(得分:7)
简单且完全配备的truncate()方法:
function truncate($string, $width, $etc = ' ..')
{
$wrapped = explode('$trun$', wordwrap($string, $width, '$trun$', false), 2);
return $wrapped[0] . (isset($wrapped[1]) ? $etc : '');
}
答案 5 :(得分:6)
尝试使用正则表达式。
你需要能够匹配20个单词(或20个单词边界)的东西。
所以(我的正则表达式非常糟糕,如果这不准确,请纠正我):
/(\w+\b){20}/
答案 6 :(得分:5)
它不是我自己的创作,它是以前帖子的修改。学分转到karim79。
function limit_text($text, $limit) {
$strings = $text;
if (strlen($text) > $limit) {
$words = str_word_count($text, 2);
$pos = array_keys($words);
if(sizeof($pos) >$limit)
{
$text = substr($text, 0, $pos[$limit]) . '...';
}
return $text;
}
return $text;
}
答案 7 :(得分:4)
创建动态时的常见问题 网页(内容来源) 来自数据库,内容管理 系统或外部源,如 RSS feed)是输入文本可以 太长并导致页面布局 '打破'。
一种解决方案是截断文本 这样它就适合页面。这个 听起来很简单,但往往是结果 由于言语和话语不符合预期 被切断的句子 不合适的分数。
答案 8 :(得分:4)
按<
空格>
拆分字符串(放入数组),然后取出该数组的前20个元素。
答案 9 :(得分:3)
有三点:
function limitWords($text, $limit) {
$word_arr = explode(" ", $text);
if (count($word_arr) > $limit) {
$words = implode(" ", array_slice($word_arr , 0, $limit) ) . ' ...';
return $words;
}
return $text;
}
答案 10 :(得分:2)
尝试以下代码,
$text = implode(' ', array_slice(explode(' ', $text), 0, 32))
echo $text;
答案 11 :(得分:2)
function truncate_words($string,$words=20) {
return preg_replace('/((\w+\W*){'.($words-1).'}(\w+))(.*)/', '${1}', $string);
}
或
function truncate_words_with_ellipsis($string,$words=20,$ellipsis=' ...') {
$new = preg_replace('/((\w+\W*){'.($words-1).'}(\w+))(.*)/', '${1}', $string);
if($new != $string){
return $new.$ellipsis;
}else{
return $string;
}
}
答案 12 :(得分:2)
在循环中使用PHP tokenizer函数strtok()。
$token = strtok($string, " "); // we assume that words are separated by sapce or tab
$i = 0;
$first20Words = '';
while ($token !== false && $i < 20) {
$first20Words .= $token;
$token = strtok(" ");
$i++;
}
echo $first20Words;
答案 13 :(得分:2)
这样的事情可能会成功:
<?php
$words = implode(' ', array_slice(split($input, ' ', 21), 0, 20));
答案 14 :(得分:1)
要限制单词,请使用以下小代码:
$string = "hello world ! I love chocolate.";
$explode = array_slice(explode(' ', $string), 0, 4);
$implode = implode(" ",$explode);
echo $implode;
$ implot会给:你好世界!我
答案 15 :(得分:1)
function getShortString($string,$wordCount,$etc = true)
{
$expString = explode(' ',$string);
$wordsInString = count($expString);
if($wordsInString >= $wordCount )
{
$shortText = '';
for($i=0; $i < $wordCount-1; $i++)
{
$shortText .= $expString[$i].' ';
}
return $etc ? $shortText.='...' : $shortText;
}
else return $string;
}
答案 16 :(得分:1)
如果您只在Laravel上进行编码,use Illuminate\Support\Str
这是示例
Str::words($category->publication->title, env('WORDS_COUNT_HOME'), '...')
希望这会有所帮助。
答案 17 :(得分:1)
$aContent = explode(' ', $cContent);
$cContent = '';
$nCount = count($aContent);
for($nI = 0; ($nI < 20 && $nI < $nCount); $nI++) {
$cContent .= $aContent[$nI] . ' ';
}
trim($cContent, ' ');
echo '<p>' . $cContent . '</p>';
答案 18 :(得分:1)
这对我来说也是 UNICODE(UTF8)的句子:
function myUTF8truncate($string, $width){
if (mb_str_word_count($string) > $width) {
$string= preg_replace('/((\w+\W*|| [\p{L}]+\W*){'.($width-1).'}(\w+))(.*)/', '${1}', $string);
}
return $string;
}
答案 19 :(得分:1)
这是我使用的一个:
$truncate = function( $str, $length ) {
if( strlen( $str ) > $length && false !== strpos( $str, ' ' ) ) {
$str = preg_split( '/ [^ ]*$/', substr( $str, 0, $length ));
return htmlspecialchars($str[0]) . '…';
} else {
return htmlspecialchars($str);
}
};
return $truncate( $myStr, 50 );
答案 20 :(得分:1)
这是我实施的内容。
function summaryMode($text, $limit, $link) {
if (str_word_count($text, 0) > $limit) {
$numwords = str_word_count($text, 2);
$pos = array_keys($numwords);
$text = substr($text, 0, $pos[$limit]).'... <a href="'.$link.'">Read More</a>';
}
return $text;
}
正如你所看到的,它基于karim79的答案,所有需要改变的是if语句还需要检查单词而不是字符。
为方便起见,我还添加了一个主要功能的链接。到目前为止,它完美无瑕地工作。感谢原始解决方案提供商。
答案 21 :(得分:0)
假设我们拥有字符串变量 $ string , $ start 和 $ limit ,我们可以从PHP借用3或4个函数来实现这一目标。他们是:
最后是 implode(),将数组元素加入到您的截断中 字符串。
Extension()
就这么简单。
我希望这会有所帮助。
答案 22 :(得分:0)
function limitText($string,$limit){
if(strlen($string) > $limit){
$string = substr($string, 0,$limit) . "...";
}
return $string;
}
这将返回20个字。希望对您有帮助
答案 23 :(得分:0)
我做了我的功能:
function summery($text, $limit) {
$words=preg_split('/\s+/', $text);
$count=count(preg_split('/\s+/', $text));
if ($count > $limit) {
$text=NULL;
for($i=0;$i<$limit;$i++)
$text.=$words[$i].' ';
$text.='...';
}
return $text;
}
答案 24 :(得分:0)
$text='some text';
$len=strlen($text);
$limit=500;
// char
if($len>$limit){
$text=substr($text,0,$limit);
$words=explode(" ", $text);
$wcount=count($words);
$ll=strlen($words[$wcount]);
$text=substr($text,0,($limit-$ll+1)).'...';
}
答案 25 :(得分:0)
function wordLimit($str, $limit) {
$arr = explode(' ', $str);
if(count($arr) <= $limit){
return $str;
}
$result = '';
for($i = 0; $i < $limit; $i++){
$result .= $arr[$i].' ';
}
return trim($result);
}
echo wordLimit('Hello Word', 1); // Hello
echo wordLimit('Hello Word', 2); // Hello Word
echo wordLimit('Hello Word', 3); // Hello Word
echo wordLimit('Hello Word', 0); // ''
答案 26 :(得分:-1)
答案 27 :(得分:-2)
function limit_word($start,$limit,$text){
$limit=$limit-1;
$stripped_string =strip_tags($text);
$string_array =explode(' ',$stripped_string);
if(count($string_array)>$limit){
$truncated_array = array_splice($string_array,$start,$limit);
$text=implode(' ',$truncated_array).'...';
return($text);
}
else{return($text);}
}