php文字列からすべてのhtmlタグを削除します


81

データベースエントリの最初の110文字を表示したい。これまでのところ非常に簡単です:

<?php echo substr($row_get_Business['business_description'],0,110) . "..."; ?>

ただし、上記のエントリには、クライアントによって入力されたhtmlコードが含まれています。したがって、次のように表示されます。

<p class="Body1"><strong><span style="text-decoration: underline;">Ref no:</span></strong> 30001<strong></stro...

明らかにダメ。

すべてのhtmlコードを削除したいので、dbエントリから<と>の間のすべてを削除してから、最初の100文字を表示する必要があります。

誰かアイデアはありますか?


サンプル入出力.........
ヴェンカタクリシュナ

回答:


141

使用する strip_tags

$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
echo strip_tags($text);   //output Test paragraph. Other text

<?php echo substr(strip_tags($row_get_Business['business_description']),0,110) . "..."; ?>

なぜうまくいかないのですか?:(使用しています:data = htmlentities($ description2、ENT_QUOTES、 'UTF-8');、 strip_tags($ data)で動作しません

私はuft8_encodeで解決しました:)、strip_tagsはhtmlentitiesをオーバーライドできないようです

これにより、ページがxssスクリプト攻撃からも保護されますか?
thekucays 2016

1
@deliveなぜ世界であなたは走ってhtmlentities、それからstrip_tags?それは完全に目的を打ち負かします。
キャプテンハイパーテキスト

特定の種類のJavaScriptをブロックしない場合があります。この機能に奇跡を期待しないでください。
PJ Brunet 2016

18

PHPのstrip_tags()関数を使用します

例えば:

$businessDesc = strip_tags($row_get_Business['business_description']);
$businessDesc = substr($businessDesc, 0, 110);


print($businessDesc);

2
これは最初に100文字を取り、その後htmlタグを削除します。しかし、OPは最初にhtmlタグを削除し、その後に100文字を削除したいと思います。
Yogesh Suthar 2013

1
@YogeshSuthar非常に真実です、私は今答えを編集します、それを指摘してくれてありがとう。-完了
EM-クリエーション

11

コンテンツを含むPHP文字列からすべてのHTMLタグを削除してください!

文字列にアンカータグが含まれていて、このタグをコンテンツとともに削除したい場合は、このメソッドが役立ちます。

$srting = '<a title="" href="https://stackoverflow.com/index.html"><b>Some Text</b></a>
Lorem Ipsum is simply dummy text of the printing and typesetting industry.';

echo strip_tags_content($srting);

function strip_tags_content($text) {

    return preg_replace('@<(\w+)\b.*?>.*?</\1>@si', '', $text);
    
 }

出力:

Lorem Ipsumは、印刷および植字業界の単なるダミーテキストです。


1
ほとんど。WHATWGのセクション12.1.2.2.4は言う</script >、有効な終了タグですが、正規表現によって処理されていません。あるべき</\1\s*>か、そのようなものです。
ビショップ

6

この正規表現を使用します。 /<[^<]+?>/g

$val = preg_replace('/<[^<]+?>/g', ' ', $row_get_Business['business_description']);

$businessDesc = substr(val,0,110);

あなたの例からとどまる必要があります: Ref no: 30001


5
strip_tagsがありますが、なぜ正規表現ですか?

1
完全にはわかりませんが、空白を含む自動終了タグはキャッチされないと思います:<br />または<special />。また、これはハック<b<b>></</b>>を考慮に入れていないと思います。
カイザー2014年

カイザーはこの答えを参照していたと思いますが、そうではありませんstrip_tags
pjmil 2016

これは、PHPのstrip_tagよりも優れたソリューションです。PHP strip_tagは、HTMLスクリプト要素の開始と終了の両方を削除します。ただし、ユーザーが最初のHTMLスクリプト要素のみを配置した場合、PHPのstrip_tagはそれを削除しません。そうすると、Webページが完全に間違って表示される可能性が非常に高くなります。PHPバージョン5.6.19でテスト済み。この小さな正規表現は、strip_tagが見逃す問題を引き起こす可能性のある部分的なHTMLタグを修正しました。ブラボー!
2016年

問題は、ユーザーが無効なhtmlを書き込むことがあるため、たとえば、<divクライアントの名前<div> hello> </ div>を実行すると、strip_tagを使用するとすべてが削除されます。正規表現を使用します...「strip_tags()は実際にはHTMLを検証しないため、タグの一部または破損により、予想よりも多くのテキスト/データが削除される可能性があります。」
ミゲル

2

私にとってこれが最善の解決策です。

function strip_tags_content($string) { 
    // ----- remove HTML TAGs ----- 
    $string = preg_replace ('/<[^>]*>/', ' ', $string); 
    // ----- remove control characters ----- 
    $string = str_replace("\r", '', $string);
    $string = str_replace("\n", ' ', $string);
    $string = str_replace("\t", ' ', $string);
    // ----- remove multiple spaces ----- 
    $string = trim(preg_replace('/ {2,}/', ' ', $string));
    return $string; 

}

0

Laravelでは次の構文を使用できます

 @php
   $description='<p>Rolling coverage</p><ul><li><a href="http://xys.com">Brexit deal: May admits she would have </a><br></li></ul></p>'
 @endphp
 {{  strip_tags($description)}}

0

<?php $data = "<div><p>Welcome to my PHP class, we are glad you are here</p></div>"; echo strip_tags($data); ?>

または、データベースからのコンテンツがある場合。

<?php $data = strip_tags($get_row['description']); ?> <?=substr($data, 0, 100) ?><?php if(strlen($data) > 100) { ?>...<?php } ?>


0
$string = <p>Awesome</p><b> Website</b><i> by Narayan</i>. Thanks for visiting enter code here;
$tags = array("p", "i");

echo preg_replace('#<(' . implode( '|', $tags) . ')(?:[^>]+)?>.*?</\1>#s', '', $string);

これを試して

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.