23

PHPの文字列の内容にHTMLの内容が含まれているかどうかを確認するにはどうすればよいですか?

正規表現が苦手なので、is_htmlこれをチェックするために「」という名前の関数が欲しいです。:) ありがとうございました!

4

6 に答える 6

35

文字列にが含まれているかどうかをテストする場合"<something>"(これは怠惰ですが、うまくいく可能性があります)、次のようなことを試すことができます:

function is_html($string)
{
  return preg_match("/<[^<]+>/",$string,$m) != 0;
}
于 2012-05-27T23:50:53.280 に答える
17

(ここにある他の提案のように)正規表現を使用する代わりに、次の方法を使用します。

    function isHtml($string)
    {
        if ( $string != strip_tags($string) )
        {
            return true; // Contains HTML
        }
        return false; // Does not contain HTML
    }

ここでは、PHP関数strip_tagsを使用して、文字列からHTMLを削除します。次に、文字列を比較し、それらが一致しない場合はHTMLタグが存在していました。

于 2013-08-20T15:25:59.920 に答える
17

受け入れられた回答は、<something>を含む文字列をHTMLと見なしますが、明らかにそうではありません。

私は以下を使用しますが、それはより良い考えかもしれませんし、そうでないかもしれません。(コメントをいただければ幸いです。)

function isHTML( $str ) { return preg_match( "/\/[a-z]*>/i", $str ) != 0; }

これにより、スラッシュと閉じ括弧の間に0個以上の文字が含まれる/>を含む文字列が検索されます。

上記の関数は次を返します。

<something>             is NOT HTML
<b>foo</b>              is HTML
<B>foo</B>              is HTML
<b>foo<b>               is NOT HTML
<input />               is HTML
于 2015-11-09T17:27:37.153 に答える
10

おそらく最も簡単な方法は次のようなものです。

<?php

function hasTags( $str )
{
    return !(strcmp( $str, strip_tags($str ) ) == 0);
}

$str1 = '<p>something with <a href="/some/url">html</a> in.';
$str2 = 'a string.';

var_dump( hasTags( $str1 ) ); // true - has tags.
var_dump( hasTags( $str2 ) ); // false - no tags.
于 2012-05-27T23:50:29.083 に答える
1

これが私が思いついたものです

function isHtml($string){
     preg_match("/<\/?\w+((\s+\w+(\s*=\s*(?:\".*?\"|'.*?'|[^'\">\s]+))?)+\s*|\s*)\/?>/",$string, $matches);
     if(count($matches)==0){
        return FALSE;
      }else{
         return TRUE;
      }
}

文字列を渡すだけで、trueまたはfalseが返されるかどうかを確認できます。それと同じくらい簡単です。

于 2012-05-27T23:52:25.040 に答える
-2

これは、HTMLコンテンツとして定義する内容によって異なります。

最も簡単なことは、文字列に正規表現で実行できるhtmlタグが含まれているかどうかをテストすることです。

<html.*>

PHPでは、テストは次のようになります

if (preg_match('/<html.*>/', $subject)) {
    # Successful match
} else {
    # Match attempt failed
}

有効なhtmlがあることを確認したい場合は、htmlパーサーを使用することをお勧めします。

于 2012-05-27T23:44:07.933 に答える