Intereting Posts
Laravel не определен php Как получить размер веб-изображения в kb? Запрос нескольких данных фан-страницы Facebook за один раз PHP Implode But Wrap Каждый элемент в цитатах ОБНОВЛЕНО: mod_rewrite и метод POST в задаче PHP, $ _POST всегда пуст __autoload не может выдать исключение, если он не загружает класс при вызове статического метода Добавление бутстрапа в WordPress с помощью functions.php Получить фрагмент (значение после hash '#') из URL-адреса в php как создать экстрактор URL, например, facebook share Создание таблицы со значениями подзапроса в PHP Laravel Создание динамических маршрутов для контроллеров из базы данных Mysql Как получить несколько параметров с одинаковым именем из URL-адреса в PHP и вставить все записи в таблицу путают эти куки в системе перенаправления Ошибка PHP CURL – завиток: (56) Ошибка Recv: сброс соединения с помощью одноранговой сети Как я могу вставлять отображение Google Map (или другое сопоставление ГИС) в PDF, когда я его создаю?

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

Как проверить, содержит ли содержимое строки 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.