我在网站上列出了1500种产品。默认情况下,页面标题都是相同的
$title="Detail Turkish Property For Sale in Turkey";
为了使页面标题更具描述性,我希望从页面产品说明中获取前10个单词,以显示在页面标题中。
我试过这个例子没有变化,
$title = stripslashes(substr($emlaklist->aciklama,0,80));
您对解决此问题的建议表示赞赏。
答案 0 :(得分:2)
以下是从How can I truncate a string to the first 20 words in PHP?复制的功能,因此我对此不予理睬,但它确实可以满足您的需求。
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;
}
答案 1 :(得分:1)
您需要一些处理字符串的方法,因为检查单词比检查字符稍微复杂一些。这个例子实际上取自Laravel框架,并进行了一些小的改编,使其独立工作。
/**
* @param {String} the value to shorten
* @param {Integer} number of words allowed
* @param {String} what to put on the end of the string
* @return {String}
*/
function words($value, $words = 100, $end = '...')
{
preg_match('/^\s*+(?:\S++\s*+){1,'.$words.'}/u', $value, $matches);
if ( ! isset($matches[0])) return $value;
if (strlen($value) == strlen($matches[0])) return $value;
return rtrim($matches[0]).$end;
}
然后你可以使用类似的东西:
$title = words($title, 10, '<a href="#">Read more</a>');
将此用于您的代码:
$title = words($emlaklist->aciklama, 10, '');
确保声明了该功能,如果需要,只需从此处复制粘贴。另外,请确保$emlaklist->aciklama
包含您需要的内容。
答案 2 :(得分:1)
这应该适合你。让我们说:
$title="Detail Turkish Property For Sale in Turkey";
$description = implode(' ',array_slice(explode(' ', $title), 0, 10));
以下是php手册的链接,用于解释所使用的功能:
爆炸功能 - http://php.net/manual/en/function.explode.php
array_slice函数 - http://au2.php.net/manual/en/function.array-slice.php
内爆函数 - http://au2.php.net/manual/en/function.implode.php
古德勒克。
答案 3 :(得分:1)
根据我在评论中看到的内容,您首先必须确保变量($emlaklist
)已设置,如果您愿意将其值附加到$title
变量。
通常,您可能会尝试将以$emlaklist = ..
开头的代码部分复制到$title =
之前的位置,但很可能这是数据库请求,因此您可能需要采取其他方式代码考虑在内,这有助于获得这个价值......
除此之外,这里的其他答案将非常能够处理缩短您的描述等。
(讽刺这个评论太长了,但无论如何它可能会有所帮助。)