Удалениетеги перед строками - PullRequest
1 голос
/ 14 мая 2019

Я работаю над своим php, чтобы получить данные электронной почты из тела письма.У меня проблема с удалением тегов <br /> перед строками This message was created.

Вот полное тело письма:

<br />
<br />
This message was created automatically by mail delivery software.<br />
<br />
A message that you sent could not be delivered to one or more of its<br />
recipients. This is a permanent error. The following address(es) failed: 
<br />
<br />
   fvsafsafsaf@shitmail.com<br />
      retry timeout exceeded

Я пробовал это:

$top_message = str_replace('<br /> <br /> This message', 'This message', $top_message);

И я также попробовал это:

$top_message = str_replace('<br /> <br />', '', $top_message);

Он не удалит теги <br /> перед строками, и ничего не происходит.

Вот полный код:

$body = imap_body($mailbox, $email_number, 2);
$email_body = utf8_decode(imap_utf8($body));

$top_message = getBetween($email_body, 'charset=us-ascii', 'exceeded') . 'exceeded';       
$top_message = nl2br($top_message);
$top_message = str_replace('<br /> <br /> This message', 'This message', $top_message);
echo $top_message

Я пытаюсь добиться того, чтобы при извлечении данных электронной почты из тела письма я хотел использовать nl2br, чтобы добавить теги <br /> для каждой строки, а затем я хочу удалитьдва тега <br /> перед строками This message was created.

Я хочу, чтобы это выглядело так:

This message was created automatically by mail delivery software.<br />
<br />
A message that you sent could not be delivered to one or more of its<br />
recipients. This is a permanent error. The following address(es) failed: 
<br />
<br />
   name@example.com<br />
      retry timeout exceeded

Не могли бы вы показать мне пример того, как я могуудалить два <br /> тега перед строками?

Спасибо.

Ответы [ 4 ]

1 голос
/ 14 мая 2019

Вы можете использовать ltrim (), который удалит символы в соответствии с маской символов.
Имеется в виду любой < и любой b и любой r и любой / и любой >, пока не будет найден другой символ.

$message = ltrim($message, "<br/> ");

Я добавил пробел еще и потому, что он все равно будет "необязательным".

Пожалуйста, обратите внимание, что это не сработает, если ответ на мой комментарий отрицательный, что означает, что сообщение не всегда начинается с "this message ..".
Потому что если строка "<br> <br> break free...", то результат будет "eak free...", потому что маска символов удалит «br» в «break».
И он также удалит, если слово начинается с "rb".

1 голос
/ 14 мая 2019

Используйте preg_replace со следующим регулярным выражением: /^(<br\s*\/>\s*)*/.

Это удалит все теги <br/> в начале вашего сообщения.

$str = "<br />
<br />
This message was created automatically by mail delivery software.<br />
<br />
A message that you sent could not be delivered to one or more of its<br />
recipients. This is a permanent error. The following address(es) failed: 
<br />
<br />
   fvsafsafsaf@shitmail.com<br />
      retry timeout exceeded";

print_r(preg_replace('/^(<br\s*\/>\s*)*/', '', $str));

Вывод:

This message was created automatically by mail delivery software.<br />
<br />
A message that you sent could not be delivered to one or more of its<br />
recipients. This is a permanent error. The following address(es) failed: 
<br />
<br />
   fvsafsafsaf@shitmail.com<br />
      retry timeout exceeded
0 голосов
/ 14 мая 2019

Я пытаюсь добиться того, чтобы при получении данных электронной почты из тела письма я хотел использовать nl2br, чтобы добавить теги <br /> для каждой строки, а затем я хочу удалить два тега <br /> до того, как строка «Это сообщение было создано».

Но зачем ты это делаешь? Только не добавляйте теги <br/> для начала.

$top_message = nl2br(trim($top_message));
0 голосов
/ 14 мая 2019

Похоже, у вас есть символ новой строки (\ n) между
.Пожалуйста, попробуйте это:

$top_message = str_replace("/software\.<br \/>\n<br \/>/", 'software.', $top_message);
...