3

リッチテキスト ボックス コントロールを使用して、1 ページにいくつかのデータを投稿しています。そして、HTML マークアップを使用してデータをデータベース テーブルに保存しています 例 : This is <b >my bold </b > text

この列の最初の 50 文字を別のページに表示しています。ここで、保存するときに、太字のタグを適用して(50文字を超える)文を保存し、これをトリミングするときに他のページに保存すると(最初の50文字を取得するため)、閉じbタグが失われます(</b> ) .そのため、そのページの残りのコンテンツに太字が適用されます。

どうすればこれを解決できますか? 開いているすべてのタグが閉じられていないことを確認するにはどうすればよいですか? PHPでこれを行う簡単な方法はありますか。HTML タグ全体を削除/マークアップして、文をプレーン テキストとして表示する機能はありますか?

4

4 に答える 4

3

http://php.net/strip_tags

strip_tags 関数は、持っているタグをすべて削除します。

于 2009-04-29T05:43:52.783 に答える
2

はい

$textWithoutTags = strip_tags($html);
于 2009-04-29T05:44:21.643 に答える
1

私は通常、これにHTML::Truncateを使用します。もちろん、Perlモジュールであるため、PHPで直接使用することはできませんが、ソースコードは(HTMLパーサーを使用するという)実用的なアプローチを示しています。

別のアプローチは、現在行っているように切り捨ててから、Tidyを使用して修正することです。

于 2009-04-29T15:03:59.503 に答える
1

HTML タグを残して適切に閉じたい場合は、PHP: Truncate HTML, ignoring tagsを参照してください。それ以外の場合は、次をお読みください。

strip_tagsは HTML タグを削除しますが、HTML エンティティ ( など&amp;) は削除しないため、切り詰めると問題が発生する可能性があります。

エンティティも処理するには、タグを削除した後にhtml_entity_decodeを使用してエンティティをデコードし、次にトリミングして、最後にhtmlspecialcharsでエンティティを再エンコードします。

$text = "1 &lt; 2\n";
print $text;
print htmlspecialchars(substr(html_entity_decode(strip_tags($text), ENT_QUOTES), 0, 3));

(すべてのエンティティを実際に変換するための ENT_QUOTES の使用に注意してください。)

結果:

1 < 2
1 <

脚注:上記は、ISO-8859-1 にデコードできるエンティティに対してのみ機能します。国際文字のサポートが必要な場合は、すでに UTF-8 でエンコードされた文字列を使用している必要があり、html_entity_decodeの呼び出しでそれを指定するだけです。

于 2010-10-08T15:20:44.360 に答える