4

ある種のブログ形式で表示されるいくつかのコンテンツ (外部ソースからのもの、特別に書かれたもの) があります。特定の文字数の後のテキストを切り取りたいので、現在これを行っています:

<?=substr( strip_tags($a['content']), 0, 400 )?>

問題は、これによりすべての書式設定が失われ、大量のテキストの塊が 1 つだけ得られることです。しかし、タグを取り除かないと、明らかに一部のタグが閉じられず、レイアウトが台無しになります。

X 個の文字の後で切り詰めるにはどうすればよいでしょうか。また、いくつかの基本的な書式も保持しますか?

4

4 に答える 4

4

http://snippets.dzone.com/posts/show/7125

これにより、切り取られたタグが自動的に閉じられます。コメントのバージョンの方が優れているようです。

于 2010-06-04T14:26:13.477 に答える
0

これがあなたの問題に対する最善のアプローチであるかどうかは確信が持てませんが、それは単純なものであり、html でいくつかの基本的なフォーマットを保持するために 1 つまたは 2 つのタグを保持することだけに関心がある場合に機能します。

したがって、次のようなことができます:保持したいタグを見つけて、それらを文字の一意の組み合わせに置き換えます。次に、文字列を切り捨てた後、作成した一意の文字列の組み合わせを見つけて、最初に置き換えたタグで置き換えます。

$content = str_replace("<br/>", "\n", $a['content']);
$content = substr(strip_tags($content), 0, 400); 
echo str_replace("\n", "<br/>", $content);
于 2010-06-04T15:39:37.833 に答える
0

これはあなたの質問に答えないかもしれませんが、これはこの問題を解決する 1 つの方法です。

もし私がブログを書いていたら、投稿が切り捨てられる場所を定義したいと思います。このようにして、ビデオのようなものを投稿し、ビデオが終了する場所で投稿を切り捨て、投稿が表示されたときに残りを表示することができます。

投稿を切り捨てたい場所に特定の文字列を追加してみてください。たとえば、「--」またはタグを追加して、区切り位置が表示されないようにしてください。

そこから、mb_stripos を使用してブレーク文字列の場所を保存し、その場所を部分文字列メソッドの長さとして渡すことができます。

また...

<?=substr( strip_tags($a['content']), 0, mb_stripo(strip_tags($a['content']),
"break string"))?>
于 2010-06-04T14:34:17.937 に答える
0

これはあなたが望むほど正確ではないかもしれませんが、見出しリンクや段落などのテキストマークアップのみが使用されていることが確実な場合は、次のようになります。

$i = 0;
while($i < 400){
    $i = strpos($string, '</p>', $i) + 4;
  }
 echo substr( $string, 0, strpos($string, '</p>', $i)+4);

これは、文字列の長さが可変であることを意味しますが、最も近い段落にできるだけ近いものになります。

于 2010-06-04T14:44:57.793 に答える