Подтвердить что ты не робот

Заменить несколько новых строк, вкладок и пробелов

Я хочу заменить несколько символов новой строки одним символом новой строки и несколько пробелов одним пробелом.

Я пробовал preg_replace("/\n\n+/", "\n", $text); и не удалось!

Я также делаю эту работу над $ text для форматирования.

$text = wordwrap($text, 120, '<br/>', true);
$text = nl2br($text);

$ text - это большой текст, взятый у пользователя для BLOG, и для лучшего форматирования я использую wordwrap.

4b9b3361

Ответ 1

Теоретически, регулярное выражение работает, но проблема в том, что не все операционные системы и браузеры отправляют только \n в конце строки. Многие также отправят.

Пытаться:

Я упростил это:

preg_replace("/(\r?\n){2,}/", "\n\n", $text);

И для решения проблемы некоторых отправлений только:

preg_replace("/[\r\n]{2,}/", "\n\n", $text);

На основании вашего обновления:

// Replace multiple (one ore more) line breaks with a single one.
$text = preg_replace("/[\r\n]+/", "\n", $text);

$text = wordwrap($text,120, '<br/>', true);
$text = nl2br($text);

Ответ 3

Это ответ, как я понимаю вопрос:

// Normalize newlines
preg_replace('/(\r\n|\r|\n)+/', "\n", $text);
// Replace whitespace characters with a single space
preg_replace('/\s+/', ' ', $text);

Это реальная функция, которую я использую для преобразования новых строк в HTML-строки и элементы абзаца:

/**
 *
 * @param string $string
 * @return string
 */
function nl2html($text)
{
    return '<p>' . preg_replace(array('/(\r\n\r\n|\r\r|\n\n)(\s+)?/', '/\r\n|\r|\n/'),
            array('</p><p>', '<br/>'), $text) . '</p>';
}

Ответ 4

Вам нужен многострочный модификатор для соответствия нескольким строкам:

preg_replace("/PATTERN/m", "REPLACE", $text);

Также в вашем примере вы, кажется, заменяете 2+ строк новой строки ровно 2, что не соответствует вашему вопросу.

Ответ 5

Я хотел бы предложить что-то вроде этого:

preg_replace("/(\R){2,}/", "$1", $str);

Это позаботится обо всех символах новой строки Unicode.

Ответ 6

Я пробовал все выше, но это не сработало для меня. Затем я создал длинный путь для решения этой проблемы...

До:

echo nl2br($text);

После:

$tempData = nl2br($text);
$tempData = explode("<br />",$tempData);

foreach ($tempData as $val) {
   if(trim($val) != '')
   {
      echo $val."<br />";
   }
}

И это сработало для меня.. Я написал здесь, потому что, если кто-то пришел сюда, чтобы найти ответ, как я.

Ответ 7

Если вы просто хотите заменить несколько вкладок одной вкладкой, используйте следующий код.

preg_replace("/\s{2,}/", "\t", $string);

Ответ 8

Попробуйте следующее:

preg_replace("/[\r\n]*/", "\r\n", $text); 

Ответ 9

Замените голову и конец строки или документа!

preg_replace('/(^[^a-zA-Z]+)|([^a-zA-Z]+$)/','',$match);

Ответ 10

Я имел дело с функцией strip_tags в PHP и у меня были некоторые проблемы, такие как: после переноса строки появляется новая строка с несколькими пробелами, а затем непрерывно появляется новый перевод строки... и т.д. без каких-либо правил :(.

Это мое решение для работы с strip_tags

Заменить несколько пробелов на один, несколько разрывов строки на один разрыв строки

function cleanHtml($html)
{
    // Clean code into script tags
    $html = preg_replace('#<script(.*?)>(.*?)</script>#is', '', $html);

    // Clean code into style tags
    $html = preg_replace('/<\s*style.+?<\s*\/\s*style.*?>/si', '', $html );

    // Strip HTML
    $string = trim(strip_tags($html));

    // Replace multiple spaces on each line (keep linebreaks) with single space
    $string = preg_replace("/[[:blank:]]+/", " ", $string); // (*)

    // Replace multiple spaces of all positions (deal with linebreaks) with single linebreak
    $string = preg_replace('/\s{2,}/', "\n", $string); // (**)
    return $string;
}

Ключевые слова (*) и (**).