Оставьте пробелы и символы новой строки во время санации статьи

Я пытаюсь создать что-то вроде санитарной функции статьи. Я имею в виду функцию, которая очищает или нормализует содержание статей, которые отображаются на сайтах блогов html.

Он должен удалить все пробелы, кроме \n а также , Итак, перевод строки и пробел.

Я начал идею кодировать символы новой строки и пробелы с помощью функции php addcslashes. Затем удалите все вхождения. Затем используйте полоски. Затем заменить несколько \x20 вхождения с одиночными. Так что это будет что-то вроде символа новой строки и пробела временного спящего режима для работы с регулярными выражениями.

Но мне это не удалось, потому что в выводе нет символа новой строки, который существует во входе.

Онлайн версия https://ideone.com/I4oZCJ

Мой код, который не работает:

<?php
$text = 'first line
second line';
$text = addcslashes($text, "\x20\t");
$text = preg_replace('/\s+/', ' ', $text);
$text = stripslashes($text);
$text = preg_replace('/\s+/', ' ', $text);
var_dump($text);

Как получить его?

Спасибо

1

Решение

Вы можете заменить горизонтальные пробельные символы, используя \h учебный класс:

preg_replace('/\h+/', ' ', $text');

демонстрация

Кроме того, вы можете создать собственный класс персонажей, исключая все персонажи, которых вы не хочу заменить:

 preg_replace('/[^\S\n]+/', ' ', $text);

По сути, это соответствует всем главам, которые НЕ являются \S (без пробелов) и не \n (без символов новой строки). Оба работают.

1

Другие решения

https://ideone.com/hJrH8R

<?php
function clean($text) {
$text = preg_replace('/[\cK\f\r\x85]+/', '', $text);
$text = preg_replace('/\h+/', ' ', $text);
return  $text;
}
0

По вопросам рекламы [email protected]