регулярное выражение: изменить HTML перед сохранением в базе данных - PullRequest
0 голосов
/ 25 августа 2010

Перед сохранением в базу данных мне нужно


  1. удалить все теги
  2. удалить все, кроме одного пробела
  3. удалить все, кроме одной новой строки

для этого я делаю следующее

  1. $content = preg_replace('/<[^>]+>/', "", $content);
  2. $content = preg_replace('/\n/', "NewLine", $content);it's for not to lose them when deleting more then one white space character

    $content = preg_replace('/(\&nbsp\;){1,}/', " ", $content);

    $content = preg_replace('/[\s]{2,}/', " ", $content);

  3. и, наконец, я должен удалить более одного слова "NewLine".

после первых двух пунктов я получаю текст в таком формате -

NewLineWordOfText
NewLine
NewLine
NewLine NewLine WordOfText &quot;WordOfText WordOfText&quot; WordOfText NewLine&quot;WordOfText
...

как теледелить больше чем один перевод строки из такого контента?

Спасибо

Ответы [ 2 ]

3 голосов
/ 25 августа 2010

Прежде всего, в то время как HTML не является регулярным и, следовательно, использование регулярных выражений для его синтаксического анализа - плохая идея, в PHP есть функция, которая удаляет теги для вас: strip_tags

Чтобы сжать пробелы при сохранении символов новой строки:

$content = preg_replace('/[^\n\S]{2,}/', " ", $content);
$content = preg_replace('/\n{2,}/', "\n", $content);

Первая строка будет сжать все пробелы, кроме \n ([^\n\S] означает все символы, которые не \n а не непробельный символ) в один пробел.Второй будет сжимать несколько новых строк в одну новую строку.

0 голосов
/ 25 августа 2010

почему бы вам не использовать nl2br (), а затем preg_replace все <br /><br /> s всего с <br />, затем все <br /> s обратно в \ n?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...