Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/49: Рейтинг темы: голосов - 49, средняя оценка - 4.86
UchihaSV
221 / 182 / 92
Регистрация: 08.06.2013
Сообщений: 614
1

Замена переноса строк(не \n символ) на br

09.09.2014, 14:17. Просмотров 9405. Ответов 15
Метки нет (Все метки)

Имеется <textarea>, туда чел вводит свой текст, естественно с переводами строк(просто нажимает Enter), и потом отправляет этот текст в PHP-скрипт который сохраняет текст без изменений в мускуль. Но базе он сохраняется как есть! То есть переводы строк не отображаются как - \n, а просто как была запись в текстареа так же и сохранилось в бд. Мне почему-то раньше казалось, что бд вместо перевода строк были \n - символы.
Я решил добавить в код обработку текста через nl2br перед отправкой в бд, но эффекта никакого(думаю потому что текст он получает как есть, без символов \n, а он заменяет только \n или \r\n).
Может это так стало в HTML 5, короче говоря я не нашел в гугле как решить мою проблему, все говорят только заменять \n символ на br, но вот нет у меня этого \n символа хоть убей, у меня перевод строки идет как есть прямо переводом, а не \n.
Мне нужно эти обычные переводы строк заменить на <br>, потому, что когда я вставляю этот текст в параметр JS функции, JS выбивает ошибку "Uncaught SyntaxError: Unexpected token ILLEGAL", из-за того что там простой перевод строки стоит.
Пример:
Сейчас: myfunction("текст текст текст текст

текст текст текст текст текст текст текст текст"); //Это выбивает ошибку JS
Нужно: myfunction("текст текст текст текст<br><br>текст текст текст текст текст текст текст текст"); //Так будет работать.
Нужно решение на PHP или JS ну или может это в самом mysql можно задать.

Скрин текста в mysql: https://yadi.sk/i/-arUDvZ8bJGPE
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.09.2014, 14:17
Ответы с готовыми решениями:

Как писать символ переноса строки в зависимости от OS сервера?
Как я понимаю, на сервере с разными ОС - и разные символы переноса строки. Под...

Символ переноса строки в textarea
Замучался с заменой переноса строки в textarea на пробелы. Делаю так: $string...

Символ переноса на следующую строку
Здраствуйте. Возникла небольшая проблема следующего плана: при записе...

Не работает символ переноса строки \n
Добрый день! Есть проблема: получаю из формы строку методом POST, внутри...

Tinymce символ переноса строки в таблицах
Подскажите пожалуйста. В данном редакторе при создании таблицы, после каждого...

15
Vas-e-na
418 / 415 / 78
Регистрация: 21.06.2010
Сообщений: 1,362
09.09.2014, 15:27 2
UchihaSV, читайте документацию nl2br - это не замена а добавление, юзайте
PHP
1
2
3
4
mb_ereg_rerplace('\n', '<br />', 'текст
с
переносом
строки');
0
UchihaSV
221 / 182 / 92
Регистрация: 08.06.2013
Сообщений: 614
09.09.2014, 16:46  [ТС] 3
Vas-e-na, не помогло, он не заменил на брки, видать потому что там не \n-ки стоят, а просто сами переносы, без \n-ок.
0
Vas-e-na
418 / 415 / 78
Регистрация: 21.06.2010
Сообщений: 1,362
09.09.2014, 16:57 4
UchihaSV, а может потому что я опечатался: mb_ereg_replace
И да, я только что тестил все работает
0
Kerry_Jr
Эксперт PHP
2210 / 2006 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
09.09.2014, 16:59 5
Цитата Сообщение от UchihaSV Посмотреть сообщение
а просто сами переносы, без \n-ок.
Перенос строки либо "\n", либо "\n\r", либо "\r" - в зависимости от системы (UNIX, Windows, Mac соответственно). Иного быть не может.
0
UchihaSV
221 / 182 / 92
Регистрация: 08.06.2013
Сообщений: 614
09.09.2014, 17:29  [ТС] 6
Vas-e-na, Я знаю что у тя там ошибка, я без ошибки написал, если бы я с ошибкой написал мне бы php выдал бы варнинг, попробовал "\n", либо "\n\r", либо "\r" не помогает.
Еще раз скажу я знаю что раньше вместо знака перевода строки в бд отображался знак \n(и у людей была проблема как поставить знаки перевода в HTML и тут им nl2br помогал), но у меня почему то сейчас такого нет и идет сразу перевод строки без \n знака, можете увидеть в скрине.
0
Vas-e-na
418 / 415 / 78
Регистрация: 21.06.2010
Сообщений: 1,362
09.09.2014, 17:45 7
Цитата Сообщение от UchihaSV Посмотреть сообщение
еревод строки без \n знака, можете увидеть в скрине
Ты не поверишь, у всех так и идет и увсех так работает. Единственное что еще могу предложить заменить \n на PHP_EOL
0
Kerry_Jr
Эксперт PHP
2210 / 2006 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
09.09.2014, 18:03 8
Цитата Сообщение от UchihaSV Посмотреть сообщение
Сейчас: myfunction("текст текст текст текст
текст текст текст текст текст текст текст текст"); //Это выбивает ошибку JS
Во-первых, в JS конец строки является концом выражения, и поэтому он выдает ошибку.
Во-вторых, как я уже писал, есть три варианта конца строки и других не дано. И на будущее - символ конца строки есть символ непечатный, поэтому так просто ты его не увидишь, не считая самого перевода.
В-третьих, попробуй символ переноса взять в двойные кавычки.
0
UchihaSV
221 / 182 / 92
Регистрация: 08.06.2013
Сообщений: 614
09.09.2014, 18:05  [ТС] 9
Сейчас только, что проверил в отдельном файле без бд:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
error_reporting(E_ALL);
$asd = "Текст с переводом
 
строки фыаыправрпа
рпа
р
ап
р
апрапрапр";
echo "Исходный текст: ".$asd;
$asd = mb_ereg_replace('\n', '<br />', $asd);
 
echo "<br>После замены на br: ".$asd;
?>
И получил ответ:
HTML5
1
2
3
4
5
6
7
8
9
Исходный текст: Текст с переводом строки фыаыправрпа рпа р ап р апрапрапр
После замены на br: Текст с переводом 
 
строки фыаыправрпа 
рпа 
р 
ап 
р 
апрапрапр
То есть сначала строка с обычными переводами строк, отображается без переводов строк в одну линию, хотя в исходном коде переводы строк имеются, а после замены переводов на бр, он отображается с переводами строк и в исходнике там стоят бр-ки.
А если через текстареа тот же текст занести в БД, то он там сохраняется с обычными переводами строк и если его получить из бд и тут же вывести, то он выводится с переводами строк(без бр-ок отображаются переводы строк!), и если текст обработать функцией и сохранить в бд, то бр-ки не заменяют переводы строк. Возможно это из-за БД. Или может быть с текстом какие-то чудеса творит PDO MySQL?
0
Kerry_Jr
Эксперт PHP
2210 / 2006 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
09.09.2014, 18:08 10
Цитата Сообщение от UchihaSV Посмотреть сообщение
То есть сначала строка с обычными переводами строк, отображается без переводов строк в одну линию,
Браузеру плевать на такие переводы строк, он распознает только <br>
0
UchihaSV
221 / 182 / 92
Регистрация: 08.06.2013
Сообщений: 614
09.09.2014, 18:13  [ТС] 11
Kerry_Jr, ну да, а как ты объяснишь то что, если тот же текст занести в БД, то он там сохраняется с обычными переводами строк и если его получить из бд и тут же вывести, то он выводится в хтмле с переводами строк, хотя там нету в исходном коде никаких бр-ок, там только сами переводы строк!
Протестируйте если не верите, на HTML 5, PHP 5.5 MySQL последний и PDO Mysql.
0
Vas-e-na
418 / 415 / 78
Регистрация: 21.06.2010
Сообщений: 1,362
09.09.2014, 18:17 12
UchihaSV, целый сайт написал с textarea, и все зае..сь с переводами строк, вам предложили решение для вставки в js, РАБОЧЕЕ, но Вам пофиг... Вам пытаешься объяснить что да как, а Вам что об стенку горох.
0
UchihaSV
221 / 182 / 92
Регистрация: 08.06.2013
Сообщений: 614
09.09.2014, 19:03  [ТС] 13
Да есть такое немного, оказывается нужно \r\n заменить на бр, а не \n\r.
0
ads
09.09.2014, 19:12
  #14

Не по теме:

Цитата Сообщение от UchihaSV Посмотреть сообщение
\r\n заменить на бр, а не \n\r
маладец, выучил команду телетайпа, после того как начал с ней работать

0
Garry_coun
0 / 0 / 0
Регистрация: 26.02.2015
Сообщений: 1
26.02.2015, 15:29 15
Пишу поздно, но есть еще вероятность, что javacript ругается не только на подстановку строк, а еще и на спецсимволы.
Попробуйте подставлять в textarea следующую конструкцию:
PHP
1
2
3
<?php 
                            echo quotemeta(mb_ereg_replace('\n', '<br />', $текстовая_переменная ));
                                        ?>
Как видите, мы сначала (относительно текста) заменяем \n на <br> потом, на всякий случай, экранируем его слешами.

Возможно, проблема в этом

Добавлено через 1 час 38 минут
^^^^^^
Верхний вариант нерабочий, суть не в этом.


Дело в том, что javascript корректно подгружает "СТРОКУ\n", но ругается на полученный из php спецсимвол. Поменяйте \r\n на символы r\n\ таким образом:

PHP
1
2
            
echo mb_ereg_replace('[\r\n]', '\r\n', $текстовая_переменная);
Это если выводить значение непосредственно в value у textarea элемента

А если писать в некий блок - меняйте на:
PHP
1
2
    
echo mb_ereg_replace('[\r\n]', '<br />', $текстовая_переменная);

Для textarea такой вариант не подходит - она работает с \r\n переносами.

*ПО ИДЕЕ - код может глючить на *nix или MAC, не проверял
0
Laputa77
0 / 0 / 0
Регистрация: 27.12.2017
Сообщений: 1
27.12.2017, 13:45 16
апнем тему

У меня задача: заполнение некого поля комментария вставкой через JS с возможностью работать в дальнейшем с AJAX.
Коммент сохранен из TEXTAREA с переводами строк и в таком виде храниться в MySQL.
Учитываем что при JS напрямую не любит в коде текст с переводами строк, предварительно готовим коммент из БД через mb_ereg_replace. Затем отформатированную строку с <BR> подставляем в скрипт.

PHP
1
2
3
4
5
6
$var_temp= $comment[190];
$var_comment_190 = mb_ereg_replace ('\n', '<br />', $var_temp );
echo "<script type=\"text/javascript\">
current_comment_190 =  \"".$var_comment_190 ."\";
document.getElementById(\"cur_com_190\").innerHTML = current_comment_190;
</script>";
0
27.12.2017, 13:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.12.2017, 13:45

Замена в поле переноса строки на текстовый символ
Сорри за тупой вопрос, но для меня он горячо актуален: Как заменить в...

Символ переноса в Excel (Как заменить символ на перенос строки)
Решил подсобить всем кто будет гуглить: Как заменить символ на перенос строки в...

Появляется символ переноса
Приветствую. Я через админку, на страницу добавляю примерно такой код: &lt;tr...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru