Как проверить, содержит ли содержимое строки PHP содержимое HTML?
Мне не нравятся регулярные выражения, поэтому я хотел бы иметь функцию с именем « is_html
», чтобы проверить это. 🙂 Спасибо!
Если вы хотите проверить, содержит ли строка "<something>"
(которая ленива, но может работать для вас), вы можете попробовать что-то вроде этого:
function is_html($string) { return preg_match("/<[^<]+>/",$string,$m) != 0; }
Редактировать: Вы должны взглянуть на ответ Кевина Трааса чуть ниже. его регулярное выражение, вероятно, вернет меньше ложных срабатываний.
Вместо использования regex (как и другие предложения здесь) я использую следующий метод:
function isHtml($string) { if ( $string != strip_tags($string) ) { return true; // Contains HTML } return false; // Does not contain HTML }
Здесь я использую функцию PHP strip_tags, чтобы удалить любой HTML из строки. Затем он сравнивает строки и, если они не соответствуют HTML-тегам, присутствуют.
Вероятно, самым простым способом было бы что-то вроде:
<?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.
В принятом ответе будет рассмотрена строка, содержащая <something> как HTML, которая, очевидно, не является.
Я использую следующее, что может быть или не быть лучшей идеей. (Комментарии оценены.)
function isHTML( $str ) { return preg_match( "/\/[az]*>/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
Вот что я придумал
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. Так просто.
Это зависит от того, что вы определяете как содержимое html.
Самая простая вещь – проверить, содержит ли строка тег html, который можно выполнить с помощью регулярного выражения
<html.*>
В php тест будет
if (preg_match('/<html.*>/', $subject)) { # Successful match } else { # Match attempt failed }
Если вы хотите, чтобы у вас был действительный html, лучше использовать синтаксический анализатор html.