2010-12-17 34 views
1
$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

定义“不工作”。文本文件包含什么?你会得到什么结果? – 2010-12-17 13:16:52

+0

它不会返回30个字符或更少的文字。 – 2010-12-17 13:18:40

+1

那么,它会返回什么? – 2010-12-17 13:21:52

回答

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)."..."; 
} 

?> 
+0

哎呀,他可以使用'strpos()',因为他不是在寻找字母字符。 – BoltClock 2010-12-17 13:27:46

+0

投票了,但应该使用strpos()如果匹配静态,非''字符串像''“''。 – scoates 2010-12-17 13:33:39

+0

确实如此,但他可能希望在稍后时间对其进行配置 - 在这种情况下,您需要使用大小写敏感性。使用此功能的附加负载可以忽略不计。 – 2010-12-17 13:36:34

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 . '...'; 
} 

,是的,你的功能甚至不使用$字符PARAM ...

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