Как обрезать весь код ведущего / конечного кода, используя php

Я пытаюсь удалить все ведущие и завершающие строки в строке с использованием PHP.

Вот пример

 <br><br> Hello<br> World<br> <p>This is a message<br>...</p> <br><br><br><br> 

я хочу вернуться

 Hello<br> World<br> <p>This is a message<br>...</p> 

Я попытался сделать следующее

 echo trim($str, '<br>'); 

Но он не удаляет их. Как удалить новый html-код строки?

Solutions Collecting From Web of "Как обрезать весь код ведущего / конечного кода, используя php"

Используйте preg_replace с начала ^ и end $ anchors:

 $string = preg_replace('/^(<br>){0,}|(<br>){0,}$/', '', $string); 

Или для нескольких строк:

 $string = preg_replace('/^(<br>){0,}|(<br>){0,}$/m', '', $string); 

Вы также можете trim() его несколько раз:

 while($string !== ($string = trim($string, '<br>'))){} 

Эта функция выполняет задание. Также применимо ко всему остальному.

 //remove all leading and trailing occurences of needle ($n) from haystack ($h) function trimAll($h, $n){ if(!$h = trim($h,$n)){ trimAll($h, $n); } return $h; } 
 $p=array( '<br><br>', 'Hello<br>', 'World<br>', '<p>This is a message<br>...</p>', '<br><br><br><br>' ); function trimdeluxe($str, $sub) { $parts=explode($sub, $str); for ($x=0; $x<2; $x++) { foreach ($parts as $i=>$v) { if (!strlen($v)) { unset($parts[$i]); } else { break; } } $parts=array_reverse($parts); } return implode($sub,$parts); } foreach ($p as $str) { print $str . ' -> ' . trimdeluxe($str, '<br>') . "\n"; } : $p=array( '<br><br>', 'Hello<br>', 'World<br>', '<p>This is a message<br>...</p>', '<br><br><br><br>' ); function trimdeluxe($str, $sub) { $parts=explode($sub, $str); for ($x=0; $x<2; $x++) { foreach ($parts as $i=>$v) { if (!strlen($v)) { unset($parts[$i]); } else { break; } } $parts=array_reverse($parts); } return implode($sub,$parts); } foreach ($p as $str) { print $str . ' -> ' . trimdeluxe($str, '<br>') . "\n"; } не $p=array( '<br><br>', 'Hello<br>', 'World<br>', '<p>This is a message<br>...</p>', '<br><br><br><br>' ); function trimdeluxe($str, $sub) { $parts=explode($sub, $str); for ($x=0; $x<2; $x++) { foreach ($parts as $i=>$v) { if (!strlen($v)) { unset($parts[$i]); } else { break; } } $parts=array_reverse($parts); } return implode($sub,$parts); } foreach ($p as $str) { print $str . ' -> ' . trimdeluxe($str, '<br>') . "\n"; } 

Я написал эту функцию, которая сделает работу немного лучше, поскольку она дает мне больше гибкости в отношении того, какие символы удалять, и когда эта функция по умолчанию сначала удалит ведущие / завершающие символы в порядке:

  1. любые вкладки
  2. любые новые строки
  3. Любые
  4. Любые
  5. любые вкладки
  6. любые новые строки

 function trimString($str, $myList = array("\t","\n", "<br>","<br />", "\t","\n") ){ if( ! is_array($myList) ){ $charsToTrim[] = $chr; } else { $charsToTrim = $myList; } foreach($charsToTrim as $chr){ $len = strlen($chr); $nlen = $len * -1; while( substr($str, 0, $len) == $chr){ $str = trim(substr($str, $len)); } while( substr($str, $nlen) == $chr){ $str = trim(substr($str, 0, $nlen)); } } return $str; } 

использовать

 // default use case echo trimString($message); 

или

 //remove only one string echo trimString($message, '<br>'); // remove only the leading training '<br>' 

или

 //remove more than 1 string in order echo trimString($message, array('<br>'<br />') ); 

Надеюсь, это поможет кому-то там 🙂