Делаю блог, использую текст с html кодом. Стандартная функция nl2br никогда не нравилась, она не совсем подходит. Задача сделать автоперенос строк только для текста не попадающего в html тэги, или только в разрешенных тэгах. Делаю следующем образом
$base64 = function ($out) {
$out[1] = '[base64]'. base64_encode(trim($out[1])) .'[/base64]';
return trim($out[1]);
};
$text = preg_replace_callback('|(\<.*\>.*\</.*\>)|Us', $base64, $text);
$text = str_replace("\n\r", "<br />", $text);
$text = str_replace("\r\n", "<br />", $text);
$baseDecode = function ($out) {return base64_decode($out[1]);};
$text = preg_replace_callback('|\[base64\](.*)\[/base64\]|U', $baseDecode, $text);
Но всеравно
появляется в ul ol