SQL-запрос для преобразования символа новой строки в html ‹br›

У меня есть база данных статей mysql, которые были введены в текстовую область без форматирования, они используют только символ новой строки для разрывов строк.

\n

Мне нужно преобразовать все это в теги html br

<br />

Можете ли вы помочь мне написать запрос для этого, который я могу запустить в phpmyadmin, который сделает это?

имя таблицы

exp_channel_data

как бонусный вопрос...

Есть ли запрос, который я могу запустить, который удалит все из середины тегов p и span

Я хочу избавиться от этой штуки

<p class="MsoNormal" style="MARGIN: 0in 0in 0pt">
<span face="Times New Roman">

и в итоге только это

<p>
<span>

person mjr    schedule 24.08.2011    source источник
comment
На случай, если вы еще не знаете об этом, прочтите статью о SQL-инъекциях: en.wikipedia.org /wiki/SQL_injection. Вы действительно, действительно не хотите иметь SQL в своей базе данных. Кроме того, в целом я настоятельно рекомендую выполнять такую ​​работу по форматированию вне базы данных.   -  person Neville Kuyt    schedule 24.08.2011
comment
да, я на самом деле не включаю SQL в базу данных (я думаю), это просто однократное преобразование, которое мне нужно запустить, ценю совет   -  person mjr    schedule 24.08.2011


Ответы (4)


Первый вопрос:

UPDATE exp_channel_data SET text_column = REPLACE(text_column, '\r\n', '<br />')

Если он ничего не заменяет, используйте '\n' вместо '\r\n'.

Второй вопрос:

Вы не можете сделать это с помощью SQL-запроса, вы должны получить эти данные в PHP-скрипт или что-то еще, что вам нравится, и выполнить замену регулярного выражения (пример для PHP):

$new_str = preg_replace('#<(p|span)[^>]+>#', '<$1>', $old_string);
person piotrp    schedule 24.08.2011
comment
Для второго вопроса используйте mariadb вместо mysql и выполните REGEXP_REPLACE(). - person lrkwz; 19.04.2018
comment
Я использовал его таким образом в php trim(preg_replace('/\r\n/', ' ', $text)); - person Vivek Jain; 13.12.2019

UPDATE yourTable SET text=REPLACE(text,"\n","<br />")

Это работает для вашего первого вопроса.

person Jacob    schedule 24.08.2011
comment
Это недопустимый синтаксис SQL - person piotrp; 24.08.2011
comment
@Crack, да, извини за это. В Германии сейчас слишком жарко и влажно. - person Jacob; 24.08.2011
comment
Хех, поделись своим солнцем. 19°C и дождь в Польше ;) - person piotrp; 24.08.2011

Поскольку вы используете ExpressionEngine, вы можете просто изменить формат каждого поля на XHTML. Он добавит разметку <br /> при отображении во внешнем интерфейсе. сделать ставку, чтобы сохранить ваши данные в чистоте и оставить форматирование парсеру, отображающему их.

person Derek Hogue    schedule 24.08.2011
comment
На самом деле я переключаюсь с типа поля textarea с автоматическим форматированием br на NSM TinyMCE и хочу сохранить разрывы, если я этого не сделаю, текст будет работать вместе, если бы я не переключал типы полей, ваше решение было бы хорошим - person mjr; 24.08.2011

ЕСЛИ кто-то ищет решение на стороне PHP, используйте функцию nl2br... это сработало для меня. Он преобразует эти неприятные разрывы строк в теги HTML <br> во время выполнения.

https://www.w3schools.com/PHP/func_string_nl2br.asp

person András    schedule 18.03.2021