$excerpt= excerpt(file_get_contents("data/file.txt"), 30);
echo $excerpt;
function excerpt($str, $chars){
$index = strripos($str, ' ');
return substr($str, 0, $index)."...";
}
它不会返回以30个字符或更少字符剥离的文本。它返回整个文本,没有最后一个单词和添加的点,但如果你使用手动输入的字符串,它将完美。
如果从文本文件加载内容,为什么这不起作用?我认为/ n正在破坏这个障碍。
答案 0 :(得分:4)
你想使用stripos,而不是strripos。
<?php
$excerpt= excerpt(file_get_contents("data/file.txt"), 30);
echo $excerpt;
function excerpt($str, $chars){
$index = stripos($str, " ", $chars);
return substr($str, 0, $index)."...";
}
?>
答案 1 :(得分:2)
问题与stripos
用法无关。我可以看到你试图将字符串修剪为30个字符,而不会将字数减半。为此,您需要更正excerpt
功能:
function excerpt($str, $chars) {
//no need to trim, already shorter than wanted dimension
if (strlen($tr) <= $chars) {
return $str;
}
//find last space within wanted dimension
$last_space = strrpos(substr($str, 0, $chars), ' ');
$trimmed_text = substr($str, 0, $last_space);
return $trimmed_text . '...';
}
是的,你的函数甚至不使用$ chars param ...
答案 2 :(得分:0)
我猜你想要一个尽可能多的整个单词的摘录。 一些提示:
如果您只想要第一个3o字符,则不应阅读整个文件!
你应该做什么:只读取最大的摘录长度,然后格式化。
function readExcerpt($path){
$fhand = fopen($path,"r");
$excerpt = fread($fhand ,30);
fclose($fhand);
return $excerpt;
}
function fromatExcerpt($excerpt){
//remove last word/word fragment
$index = strripos($excerpt,' ');
if($index!==false){
$excerpt= substr($excerpt,0,$index);
}
return $excerpt.'...';
}
echo fromatExcerpt(readExcerpt("D:\hotfix.txt"));