2010-12-17 15 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がstrriposを仲介していると思う。

+0

「動作していません」と定義します。テキストファイルには何が含まれていますか?どのような結果が得られますか? –

+0

30文字以下で切り取ったテキストは返されません。 –

+1

さて、それは何を返しますか? –

答えて

4

strriposではなく、striposを使用します。

<?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

+0

が投票されましたが、静的で非アルファベットの文字列 '' "'と一致する場合はstrpos()を使用してください。 – scoates

+0

真実ですが、後で設定可能にすることができます。大文字と小文字を区別しないでください。この機能を使用すると、追加の負荷はごくわずかです。 –

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

私はあなたができるだけ多く持つ抜粋をしたいguesできるだけ全体の言葉。 ヒント:

最初の3文字がほしいのであれば、ファイル全体を読む必要はありません。

あなたがすべきこと:最大の抜粋長さまで読んでフォーマットしてください。

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")); 
関連する問題