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

Posted

技术标签:

【中文标题】如何检查字符串内容中是不是包含任何 HTML?【英文标题】:How to check if string contents have any HTML in it?如何检查字符串内容中是否包含任何 HTML? 【发布时间】:2012-06-02 10:19:46 【问题描述】:

如何检查 php 字符串内容是否包含任何 html 内容?

我不擅长正则表达式,所以我想要一个名为“is_html”的函数来检查这个。 :) 谢谢!

【问题讨论】:

“html 内容”是什么意思? 快速谷歌搜索出现preprocess.me/comment/91 HTML 标签,特定的 HTML 字符,如 , ", ', = is_html() 函数应该为以下字符串返回什么:(1)"I think that 12<20."(2)"#*D<#(@>"(3)"this=that"(4)"hello<there>bob" 我以为我发布的链接是切肉刀诶 【参考方案1】:

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

function is_html($string)

  return preg_match("/<[^<]+>/",$string,$m) != 0;

【讨论】:

你知道不用正则表达式就可以准确地表示这个表达式吗?我正在使用相同的表达式,并对正则表达式与非正则表达式的区别感到好奇。 简单、优雅、漂亮的 hack,我喜欢。 @IanWood - 不是真的。以I &lt;3 PHP 为例 - 如果使用像 strlen(strip_tags($string)) !== strlen($string) 这样的 strip_tgs 检查 html,它将错误地确定它包含 html,而实际上它不包含。我并不是说这个答案是确定字符串是否包含 html 的最佳方法,但绝对不是矫枉过正。【参考方案2】:

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

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

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

【讨论】:

strlen 在那里没有必要。 好点@Red。我已经从代码中删除了strlen,尽管它可以节省另一个进程。感谢您的建设性反馈。 函数从不返回false @paulo62 我检查该方法是否返回true。如果需要,可以很容易地放置一个 else。我已经更新了它... strip_tags 在大多数情况下过于激进。字符串 the value is &lt;4 将在您的情况下返回 true。【参考方案3】:

接受的答案会将包含 的字符串视为 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

【讨论】:

我可能会在那里使用+,因为&lt;/&gt; 不是HTML。否则,非常酷的概念! @gooli - 带有 + ,它不会匹配 &lt;input /&gt; 我看到这个正则表达式的主要问题是它不会匹配简单的,这可能是html评论中的唯一标签。【参考方案4】:

可能最简单的方法是:

<?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.

【讨论】:

这会导致错误标志。以字符串I &lt;3 PHP 为例。此函数将确定标签确实存在,而实际上它们不存在。 嗯,但是 utf-8 文本会出现 scrcmp 错误,就像许多字符串函数一样?【参考方案5】:

这就是我的想法

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

您只需传递一个字符串并检查它是否返回真或假。就这么简单。

【讨论】:

【参考方案6】:

这取决于您定义的 html 内容。

最直接的方法是测试字符串是否包含可以用正则表达式完成的html标签

<html.*>

在 php 中测试将是

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

如果您想查看是否有有效的 html,最好使用 html 解析器。

【讨论】:

我的意思是,如果我有任何包含字符 、= 和任何类型的引号的 HTML 标记! 嗯,上面的答案会测试html标签是否存在

以上是关于如何检查字符串内容中是不是包含任何 HTML?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查字符串是不是包含数组中的任何元素[关闭]

使用 Java Regex,如何检查字符串是不是包含集合中的任何单词?

如何检查字符串是不是包含列表的任何元素并获取元素的值?

如何使用 Linq where 条件检查字符串列表是不是包含任何字符串

如何在打印(xpath)之前检查文本是不是包含特定字符?

如何检查字符串是不是包含 List<string> 的任何元素?