如何检查字符串内容中是否包含任何HTML?

18 html php regex xhtml

如何检查PHP字符串内容是否包含任何HTML内容?

我对正则表达式不太好,所以我希望有一个名为" is_html" 的函数来检查它.:) 谢谢!

nic*_*ico 28

如果你想测试一个字符串是否包含一个"<something>"(这是懒惰但可以为你工作),你可以尝试这样的事情:

function is_html($string)
{
  return preg_match("/<[^<]+>/",$string,$m) != 0;
}
Run Code Online (Sandbox Code Playgroud)

编辑:您应该看看下面的Kevin Traas答案.他的正则表达可能会减少误报.

  • @IanWood - 不是真的.以"我<3 PHP"为例 - 如果使用strip_tgs检查html,例如`strlen(strip_tags($ string))!== strlen($ string)`,它将错误地确定它包含html,实际上它没有.我不是说这个答案是确定字符串是否包含html的最佳方法,但它绝对不是矫枉过正. (9认同)
  • 使用正则表达式来检测是否存在任何标签有点矫枉过正...... (2认同)

ᴍᴀᴛ*_*ᴋᴇʀ 13

而不是使用正则表达式(像这里的其他建议)我使用以下方法:

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

这里我使用PHP函数strip_tags从字符串中删除任何HTML.然后它比较字符串,如果它们不匹配,则存在HTML标记.

  • `strip_tags` 在大多数情况下过于激进。字符串 `the value is &lt;4` 将在您的情况下返回 true 。 (2认同)

Kev*_*aas 13

接受的答案将考虑包含<something>作为HTML的字符串,显然,它不是.

我使用以下内容,这可能是也可能不是更好的主意.(评论赞赏.)

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

这将查找包含斜杠和结束括号之间的零个或多个字母的/>的任何字符串.

上面的函数返回:

<something>             is NOT HTML
<b>foo</b>              is HTML
<B>foo</B>              is HTML
<b>foo<b>               is NOT HTML
<input />               is HTML
Run Code Online (Sandbox Code Playgroud)

  • 我认为你的正则表达式更好.我会编辑我的答案. (2认同)

Ian*_*ood 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.
Run Code Online (Sandbox Code Playgroud)