摘录不适用于文件内容

时间:2010-12-17 13:15:31

标签: php string

$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正在破坏这个障碍。

3 个答案:

答案 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"));