Php проверка на наличие html

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

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

Я плохо разбираюсь в регулярных выражениях, поэтому мне нужна функция с именем » is_html «, чтобы это проверить. 🙂 Спасибо!

Что должна возвращать функция is_html() для следующих строк: (1) «I think that 12<20." (2) "#*D<#(@>» (3) «this=that» (4) «hellobob»

6 ответов

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

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

Вы знаете, как представить именно это выражение без регулярного выражения? Я использую одно и то же выражение, и мне интересно узнать разницу между регулярным выражением и нерегулярным выражением.

— не совсем. Возьмем, к примеру, I

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

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

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

Хороший вопрос @Red. Я удалил strlen из кода, хоть он и минимален, но сохраняет другой процесс. Спасибо за конструктивный отзыв.

Я проверяю, возвращает ли метод true . При необходимости можно легко поставить else. Хотя я обновил его.

strip_tags в большинстве случаев слишком агрессивен. Строка the value is

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

 $str1 = '

something with html in.'; $str2 = 'a string.'; var_dump( hasTags( $str1 ) ); // true - has tags. var_dump( hasTags( $str2 ) ); // false - no tags.

Это вызывает ложные флаги. Возьмем, к примеру, строку I

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

Вы просто передаете строку и проверяете, возвращает ли она истину или ложь. Так просто.

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

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

if (preg_match('//', $subject)) < # Successful match >else

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

В принятом ответе строка, содержащая , будет рассматриваться как HTML, что, очевидно, не так.

Я использую следующее, что может быть, а может и не быть лучшей идеей. (Комментарии приветствуются.)

function isHTML( $str ) < return preg_match( "/\/[a-z]*>/i", $str ) != 0; > 

Это ищет любую строку, содержащую/> с нулем или более букв между косой чертой и закрывающей скобкой.

Вышеупомянутая функция возвращает:

 is NOT HTML foo is HTML foo is HTML foo is NOT HTML is HTML 

Источник

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

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

Что должна is_html() функция is_html() для следующих строк: (1) «I think that 12<20." (2) "#*D<#(@>» (3) «this=that» (4) «hellobob»

Почему вы хотите это знать и насколько серьезной проблемой являются ложные срабатывания в вашем случае использования?

6 ответов

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

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

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

Вы знаете, в любом случае, чтобы представить именно это выражение без регулярных выражений? Я использую то же выражение, и мне любопытно, чем отличается регулярное выражение от не регулярного выражения.

@IanWood — не совсем. Возьмем, к примеру, I

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

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

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

Хороший вопрос @Red. Я удалил strlen из кода, хотя минимальный это спасает другой процесс. Спасибо за конструктивный отзыв.

@paulo62 paulo62 Я проверяю, возвращает ли метод значение true . Можно легко поставить другое, если требуется. Я обновил его, хотя .

strip_tags слишком агрессивен в большинстве случаев. Строка the value is

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

 $str1 = '

something with html in.'; $str2 = 'a string.'; var_dump( hasTags( $str1 ) ); // true - has tags. var_dump( hasTags( $str2 ) ); // false - no tags.

Это вызывает ложные флаги. Возьмем строку, например, I

В принятом ответе будет рассмотрена строка, содержащая как HTML, который, очевидно, это не так.

Я использую следующее, что может быть или не быть лучшей идеей. (Комментарии оценены.)

function isHTML( $str ) < return preg_match( "/\/[a-z]*>/i", $str ) != 0; > 

Это ищет любую строку, содержащую /» > с нулевым или большим количеством букв между косой чертой и закрывающей скобкой.

Вышеуказанная функция возвращает:

 is NOT HTML foo is HTML foo is HTML foo is NOT HTML is HTML 

Источник

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

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

Что должна is_html() функция is_html() для следующих строк: (1) «I think that 12<20." (2) "#*D<#(@>» (3) «this=that» (4) «hellobob»

Почему вы хотите это знать и насколько серьезной проблемой являются ложные срабатывания в вашем случае использования?

6 ответов

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

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

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

Вы знаете, в любом случае, чтобы представить именно это выражение без регулярных выражений? Я использую то же выражение, и мне любопытно, чем отличается регулярное выражение от не регулярного выражения.

@IanWood — не совсем. Возьмем, к примеру, I

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

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

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

Хороший вопрос @Red. Я удалил strlen из кода, хотя минимальный это спасает другой процесс. Спасибо за конструктивный отзыв.

@paulo62 paulo62 Я проверяю, возвращает ли метод значение true . Можно легко поставить другое, если требуется. Я обновил его, хотя .

strip_tags слишком агрессивен в большинстве случаев. Строка the value is

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

 $str1 = '

something with html in.'; $str2 = 'a string.'; var_dump( hasTags( $str1 ) ); // true - has tags. var_dump( hasTags( $str2 ) ); // false - no tags.

Это вызывает ложные флаги. Возьмем строку, например, I

В принятом ответе будет рассмотрена строка, содержащая как HTML, который, очевидно, это не так.

Я использую следующее, что может быть или не быть лучшей идеей. (Комментарии оценены.)

function isHTML( $str ) < return preg_match( "/\/[a-z]*>/i", $str ) != 0; > 

Это ищет любую строку, содержащую /» > с нулевым или большим количеством букв между косой чертой и закрывающей скобкой.

Вышеуказанная функция возвращает:

 is NOT HTML foo is HTML foo is HTML foo is NOT HTML is HTML 

Источник

Поиск тегов HTML в строке

У меня есть string и эта строка действительна HTML. Теперь я хочу найти все теги с определенным name и attribute .

Я пробовал это регулярное выражение (т. Е. Div с типом): /()/ .

Do not match me
match me
not me
match me too

Если я использую preg_match, тогда я получаю только

match me

что логично, потому что у другого есть атрибуты в другом порядке.

Какое регулярное выражение мне нужно, чтобы получить следующий array при использовании preg_match в строке примера ?:

array(0 => ' 
match me
', 1 => '
match me too
')

Общий совет: не используйте регулярное выражение для анализа HTML. Это будет беспорядочно, если HTML изменится.

DOMDocument этого используйте DOMDocument :

$str = Do not match me
match me
not me
match me too
EOF; $doc = new DOMDocument(); $doc->loadHTML($str); $selector = new DOMXPath($doc); $result = $selector->query('//div[@type="special_type"]'); // loop through all found items foreach($result as $node) < echo $node->getAttribute('src'); >

Как сказал hek2msql, лучше использовать DOMDocument

$html = ' 
Do not match me
match me
not me
match me too
'; $matches = get_matched($html); function get_matched($html)< $matched = array(); $dom = new DOMDocument(); @$dom->loadHtml($html); $length = $dom->getElementsByTagName('div')->length; for($i=0;$i<$length;$i++)< $type = $dom->getElementsByTagName("div")->item($i)->getAttribute("type"); if($type != 'special_type') continue; $matched[] = $dom->getElementsByTagName("div")->item($i)->getAttribute('src'); // or $matched[] = $dom->getElementsByTagName("div")->item($i)->nodeValue; > return $matched; >

Источник

Читайте также:  Что обозначает аббревиатура html
Оцените статью