2009-04-29 10 views
3

リッチテキストボックスコントロールを使用して、一部のデータを1ページに投稿しています。 と私は例アップHTMLマークと私のDBテーブルにデータを保存しています:これは私が別のページにこの列の最初の50個の文字を表示しています<B>私の大胆な</B >テキストPHP:トリミングされたHTMLマークアップを表示する際にHTMLマークアップの問題が発生する

です。今私が保存しているとき、私は大文字のタグが適用された文章(50文字以上)を保存し、私はこれを(最初の50文字を取るために)これをトリミングするときに私は閉じるbタグを失うだろう(</b > )。そのページの残りの部分に太字が適用されています。

どうすればこの問題を解決できますか?どのオープンタグが閉じられていないかを確認するにはどうすればよいですか? PHPでこれを行う方法はありますか? HTMLタグ全体を削除してマークアップし、その文章をプレーンテキストとして与える機能はありますか?

答えて

2

はい

$textWithoutTags = strip_tags($html); 
1

私は一般的に、このためにHTML::Truncateを使用しています。もちろん、Perlモジュールであるため、PHPで直接使用することはできませんが、ソースコードでは(HTMLパーサーを使用する)実際の方法が示されています。

代わりに、現時点で切り捨てて、Tidyを使用して修正しようとする可能性があります。

1

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

strip_tagsはHTMLタグを削除しますが、削除された場合でも問題が発生する可能性のあるHTMLエンティティ(&amp;など)は削除されません。

一つのタグを除去した後、エンティティをデコードする html_entity_decodeを使用することができ、同様のエンティティを処理するために、その後、トリム、そして最後に htmlspecialcharsでエンティティを再エンコード:ENT_QUOTESの

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

(注使用は、実際にすべてを変換しますエンティティ)

結果:

 
1 < 2 
1 < 

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