Подтвердить что ты не робот

Как проверить, содержит ли содержимое строки какой-либо HTML-код?

Как проверить, содержит ли содержимое строки PHP содержимое HTML?

Мне не нравятся регулярные выражения, поэтому я хотел бы иметь функцию с именем "is_html", чтобы проверить это.:) спасибо!

4b9b3361

Ответ 1

Если вы хотите проверить, содержит ли строка "<something>" (которая ленива, но может работать для вас), вы можете попробовать что-то вроде этого:

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

Редактирование: вы должны взглянуть на ответ Кевина Трааса чуть ниже. его регулярное выражение, вероятно, вернет меньше ложных срабатываний.

Ответ 2

Вместо использования регулярного выражения (как и другие предложения здесь) я использую следующий метод:

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

Здесь я использую функцию PHP strip_tags, чтобы удалить любой HTML из строки. Затем он сравнивает строки и, если они не соответствуют HTML-тегам, присутствуют.

Ответ 3

Вероятно, самым простым способом было бы что-то вроде:

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

Ответ 4

В принятом ответе будет рассмотрена строка, содержащая <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

Ответ 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;
      }
}

Вы просто передаете строку и проверяете, вернет ли она true или false. Так просто.

Ответ 6

Это зависит от того, что вы определяете как содержимое html.

Самая простая вещь - проверить, содержит ли строка тег html, который можно сделать с помощью регулярного выражения

<html.*>

В php тест будет

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

Если вы хотите видеть, что у вас есть действительный html, лучше использовать синтаксический анализатор html.