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; }

这将查找任何包含 /> 且斜线和右括号之间有零个或多个字母的字符串。

上述函数返回:

<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;
      }
}

您只需传递一个字符串并检查它是否返回真或假。就如此容易。

于 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 回答