Как обнаружить HTML-теги в тексте?

#php #html #strpos

#php #HTML #strpos

Вопрос:

Я хочу посмотреть $text , содержит ли значение какое-либо форматирование HTML, чтобы я мог соответствующим образом настроить электронное письмо PHPMailer как HTML или обычный текст. Текст теряет перевод строки, если рассматривается как HTML.

 $email_body="<p><b>This is html code</b></p>";
$text = htmlentities($email_body); 
if (strpos($text,"<b>") !== false) {
    echo " Found a b ";                
}
  

Это не находит это.

Комментарии:

1. Я бы предположил, что вы, возможно, делаете это в обратном направлении; вместо того, чтобы генерировать свой html, а затем удалять теги; возможно, вам следует начать только с текста, а затем создавать html в зависимости от того, html это или обычный текст.

2. Текст поступает из формы, в которую пользователь может вводить либо прямой текст, либо текст html. Мне нужно выяснить, содержит ли он html-код, чтобы я мог указать отправителю сообщения правильно отформатировать тело.

Ответ №1:

Есть способы сделать это с помощью регулярных выражений через preg_match или DOMDocument , но есть более простой способ: использовать strip_tags , а затем сравнить урезанное значение с не урезанным значением.

 // Set a test array of mixed strings.
$email_body_array = array();
$email_body_array[] = "<p><b>This is html code.</b></p>";
$email_body_array[] = "This is plain text.";
$email_body_array[] = "This is a <b>bold</b> statement..";

// Now roll through the strings amp; test them.
foreach ($email_body_array as $email_body) {
  $email_body_stripped = strip_tags($email_body);
  $text = htmlentities($email_body); 
  if ($email_body !== $email_body_stripped) {
    echo "That has HTML!<br />";                
  }
  else {
    echo "Boring, plain old text.<br />";                
  }
}
  

Это вывод из приведенного выше, показывающий концепцию в действии:

У этого есть HTML!

Скучный, обычный старый текст.

У этого есть HTML!