Я пытаюсь удалить все ведущие и завершающие строки в строке с использованием 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-код строки?
Используйте 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"; }
Я написал эту функцию, которая сделает работу немного лучше, поскольку она дает мне больше гибкости в отношении того, какие символы удалять, и когда эта функция по умолчанию сначала удалит ведущие / завершающие символы в порядке:
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 />') );
Надеюсь, это поможет кому-то там 🙂