![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| tikitiki |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 10.5.2005 Репутация: нет Всего: нет |
Помогите, пожалуйста.
Сделал средствами php так, чтоб сведения из текстового документа блокнота заносились в бд. Затем вывожу эти сведения (обычный текст) на странице сайта. Делал так.
И по-разному. Выводится, но пробелы и табуляцию не совсем правильно обрабатывает. У меня цель, чтобы абзац начинался (там где была табуляция в блокноте) с пробелов, а остальной текст как распределить я знаю. Видимо дело только в том, как отследить символ табуляции в блокноте. Очень бы хотелось решить эту проблему. Через регулярные выражения может как-то-но не могу сообразить как. |
|||
|
||||
| Glip |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 473 Регистрация: 30.12.2006 Репутация: 7 Всего: 18 |
"\t" - табуляция
|
|||
|
||||
| Yura_Matsuk |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 16.5.2004 Репутация: нет Всего: нет |
Я бы попробовал
1. file() - сама читает файл, возвращает массив строк - там уже делай что хочешь. 2. explode() - тут можно задать явно, какими символами будут разделяться строки. Тоже вернет массив строк. --------------------
Смех смехом, а ОНА кверху мехом... |
|||
|
||||
| americanets |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1100 Регистрация: 27.9.2006 Репутация: 5 Всего: 12 |
если выводить один в один то :
сохранит все, перенос строк, пробелы и прочее -------------------- Пусть популярную музыку слушают те, среди кого она популярна |
|||
|
||||
| tikitiki |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 10.5.2005 Репутация: нет Всего: нет |
Столько ответов. Спасибо. Всё понятно.
file() и explode() подходит. И "\t" - табуляция подходит. Только насчёт табуляции хотел уточнить
Вот так испоьзовать табуляцию в str_replace получится, если в блокноте табуляция использовалась? И что, если вместо табуляции пробелы использовались в блокноте? Тогда можно с помощью file() разбить на строки и увидеть в начале пробелы у строк? |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
интересно, что если требуется выводить текст набранный в блокноте на вэб-страницу, то вместо упражнений с str_replace можно загнать весь текст с помощью fread в переменную и обработать функцией nl2br($str);
а чтобы обеспечить табуляцию в начале абзацев (если формировать абзацы, скажем, тэгами <p>), то достаточно установить стиль:
|
|||
|
||||
| tikitiki |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 10.5.2005 Репутация: нет Всего: нет |
bars80080, вот это очень интересно.
Только я не до конца разобрался как сами абзацы найти, т.е. начало и конец абзаца.
Это подходит? |
||||
|
|||||
| tikitiki |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 10.5.2005 Репутация: нет Всего: нет |
К предыдущему моему сообщению.
Дело в том, что перевод строки не значит в блокноте начало или конец абзаца обязательно. |
|||
|
||||
| Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 20 Всего: 42 |
tikitiki,
У тебя есть четкий признак абзаца? Если это табуляция или строго 4 пробела. то можно для начала сделать вот так
Если признаков четких нет. Т.е. 4 пробела и табуляция могут встречаться где угодно в тексте - то никак. Т.е. для начала тебе придется ручками править текст (например, руками прописать в начале каждого абзаца <p>) -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
насколько я смог понять - в тексте абзацем будет считаться перевод строки, за которым идет пробел или табуляция.
Тогда алгоритм примерно такой
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| tikitiki |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 10.5.2005 Репутация: нет Всего: нет |
Fortop и
ksnk, спасибо большое. ksnk, твой код почти идеальный. Я его проверил уже. Единственное-не могу в него пробелы влепить в начало абзацев. Абзацы разбиты правильно, но не начинаются с пробелов. Пробовал, например так:
Не получилось. Если можешь, подскажи. Кроме того спасибо за пример с регулярными выражениями (меня они пока пугают ещё) . |
|||
|
||||
| tikitiki |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 10.5.2005 Репутация: нет Всего: нет |
ksnk, кроме того выяснилось, что пустая строка вставляется между абзацами.
Пробовал изменить, но пока не добился правильного результата. То строки склеиваются, то пробелов в начале по-разному получается в строках. |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
ну да, косяк... Когда убираются "неправильные" абзацы надо бы их не выкидывать, а заменять на пробел
Зачем нужен пробел в начале параграфа? Можно какой-нибудь пример текста привести? -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| tikitiki |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 10.5.2005 Репутация: нет Всего: нет |
Это отсебятина-но мне просто так хочется красную строку сделать у абзацев, как в русском языке. Это же нормальное желание по-моему. Почему страницы должны быть забиты текстом как придётся, чтоб потом пользователь мучился. Пользователь может не догадываться о трудностях программирования и гадает куда абзацы делись у этих "тугодумов". Если ты имеешь ввиду первый абзац, то там тоже нужно ставить пробел, т.к. он далее у меня в коде не учитывался.
Пробел в начале абзацев всё-равно не получился. Есть ещё варианты?
Насчёт этого регулярного выражения. Очень понравилось. Но хотел чуток разобраться с ним. \r и \n -это возврат каретки и новая строка соответственно? Что означает символы \S (думаю пробел) и \\1? В другом выражении у тебя \s в другом регистре-это как понимать? |
||||||
|
|||||||
| SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 32 Всего: 401 |
Какое отношение к красной строке имеют пробелы? Чуть выше bars80080 показал, как делать красную строку правильно. Формально да, но в виндах они задают новую строку именно парой - \r\n. В *nix-ах строки переводит только одна \n. Но раз речь о блокноте, то, видимо, используется виндовый перевод строки ;). С точностью до наоборот - любой непробельный символ;) А вот это как раз любой пробельный символ (пробел как таковой, табуляция, перевод строки). Аналогично \d - цифра, \D - не цифра, \w - элемент слова (буква, цифра, подчеркивание), \W - не элемент слова. Это то, что совпало с выражением в первой паре скобок. Подробности - в документации. Добавлено через 5 минут и 55 секунд
А если пользователь захочет этот текст скопировать и в Ворд вставить? Вот тогда ему придется помучиться, удаляя эти пробелы ;). На то HTML и гипертекст (а не просто текст), что красоту в нем можно наводить специальными средствами - таблицами стилей. А разгонять абзацы пробелами, а строки <br>-ками, будто на дореволюционной пишмашинке - вот это и есть "забивка текстом как придется" -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
стилистика набора текста в документе (будь то ворд или блокнот) следующая: если мы ставим новое предложение, то после предыдущего мы просто вставляем точку, затем пробел и начинаем новое предложение. если мы делаем абзац, то после точки нажимаем "enter" и у нас вставляются символы перевода строки. значит для разделения абзацев достаточно заменить \n на </p><p>, ну и добавить <p> в начало текста и </p> в конец. собственно всё.
в этом случае регулярки по-моему даже лишние, достаточно использовать str_replace("\n", '</p><p>', $text); |
|||
|
||||
| tikitiki |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 10.5.2005 Репутация: нет Всего: нет |
SelenIT и bars80080, спасибо большое. Я соглашусь скорее с Вашей точкой зрения и не буду так делать, как я хотел.
SelenIT тебе отдельное спасибо, т.к. много мне разъяснил. Поставлю плюсик. И вопрос закрываю, т.к. всё ясно. |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |