我有一个用PHP编写的代码片段,它从数据库中提取一个文本块并将其发送到网页上的小部件.原始文本块可以是冗长的文章或短句或短句; 但对于这个小部件,我不能显示超过200个字符.我可以使用substr()来切断200个字符的文本,但结果会在单词中间切断 - 我真正想要的是在200个字符之前在最后一个单词的末尾剪切文本.
我知道如何使用substr函数,但是这将很快结束一个单词的中间字符串.我希望字符串在一个单词的结尾处结束我将如何进行此操作?它会涉及正则表达吗?任何帮助非常感谢.
这就是我到目前为止所拥有的.只是SubStr ......
echo substr("$body",0,260);
Run Code Online (Sandbox Code Playgroud)
干杯
我在我的 WordPress 网站上使用以下代码来缩短我在 WooCommerce 上的描述摘录,如果我输入 14 个或更少的字符,它就可以正常工作。一旦我输入超过 14 个字符,它就会显示完整的简短描述。
add_action( 'woocommerce_after_shop_loop_item_title', 'lk_woocommerce_product_excerpt', 35, 2);
if (!function_exists('lk_woocommerce_product_excerpt'))
{
function lk_woocommerce_product_excerpt()
{
$content_length = 14;
global $post;
$content = $post->post_excerpt;
$wordarray = explode(' ', $content, $content_length + 1);
if(count($wordarray) > $content_length) :
array_pop($wordarray);
array_push($wordarray, '...');
$content = implode(' ', $wordarray);
$content = force_balance_tags($content);
$content = substr($content, 0, 14);
endif;
echo "<span class='excerpt'><p>$content...</p></span>";
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激。
谢谢。
可能重复:
从数组中提取固定数量的字符,仅完整单词
当它们的长度超过20个字符时,我需要截断字符串。言语必须始终保持在一起,这样:
跟我的小朋友打个招呼。
变成这个:
跟我打个招呼...
代替这个:
跟我打个招呼...
我基于一个非常老的线程中的注释设置了此功能。这个正则表达式的问题是它删除了句子的最后一个单词(当有两个或更多单词时)。
function gen_string($string,$min=20) {
$new = preg_replace('/\s+?(\S+)?$/','',substr($string,0,$min));
if(strlen($new) < strlen($string)) $new .= '…';
return $new;
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮我处理正则表达式吗?谢谢!
解决方案通过麦金太尔(少数润饰)
function gen_string($string,$max=20) {
$tok = strtok($string,' ');
$sub = '';
while($tok !== false && mb_strlen($sub) < $max) {
if(strlen($sub) + mb_strlen($tok) <= $max) {
$sub .= $tok.' ';
} else {
break;
}
$tok = strtok(' ');
}
$sub = trim($sub);
if(mb_strlen($sub) < mb_strlen($string)) $sub .= '…';
return $sub; …Run Code Online (Sandbox Code Playgroud)