Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Импорт из блокнота на сайт, Не совсем получается 
V
    Опции темы
tikitiki
Дата 4.4.2008, 04:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



Помогите, пожалуйста. 
Сделал средствами php так, чтоб сведения из текстового документа блокнота
заносились в бд. Затем вывожу эти сведения (обычный текст) на странице сайта.
Делал так.
Код

$about="    $about";
$about = str_replace ("\r\n ", "<br />&nbsp;&nbsp;&nbsp;&nbsp;", $about);

И по-разному. Выводится, но пробелы и табуляцию не совсем правильно обрабатывает.
У меня цель, чтобы абзац начинался (там где была табуляция в блокноте) с пробелов, а остальной текст как распределить я знаю. Видимо дело только в том, как отследить символ табуляции в блокноте. 
Очень бы хотелось решить эту проблему. Через регулярные выражения может как-то-но не могу сообразить как.


--------------------
PM   Вверх
Glip
Дата 4.4.2008, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 473
Регистрация: 30.12.2006

Репутация: 7
Всего: 18



"\t" - табуляция 


--------------------
user posted image
PM MAIL   Вверх
Yura_Matsuk
Дата 4.4.2008, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 16.5.2004

Репутация: нет
Всего: нет



Я бы попробовал
1. file() - сама читает файл, возвращает массив строк - там уже делай что хочешь.
2. explode() - тут можно задать явно, какими символами будут разделяться строки. Тоже вернет массив строк.
--------------------
Смех смехом, а ОНА кверху мехом...
PM MAIL   Вверх
americanets
Дата 4.4.2008, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 5
Всего: 12



если выводить один в один то : 

Код

<pre>
<?php
echo  $about; 
?>
</pre>


сохранит все, перенос строк, пробелы  и прочее 


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
tikitiki
Дата 4.4.2008, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



Столько ответов. Спасибо. Всё понятно.
file() и explode() подходит. 
И "\t" - табуляция подходит.
Только насчёт табуляции хотел уточнить
Код

$about = str_replace ("\t", "&nbsp;&nbsp;&nbsp;&nbsp;", $about);
 
Вот так испоьзовать табуляцию в  str_replace получится, если в блокноте табуляция использовалась? 
И что, если вместо табуляции пробелы использовались в блокноте? 
Тогда можно с помощью file() разбить на строки и увидеть в начале пробелы у строк?


--------------------
PM   Вверх
bars80080
Дата 4.4.2008, 16:49 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



интересно, что если требуется выводить текст набранный в блокноте на вэб-страницу, то вместо упражнений с str_replace можно загнать весь текст с помощью fread в переменную и обработать функцией nl2br($str);

а чтобы обеспечить табуляцию в начале абзацев (если формировать абзацы, скажем, тэгами <p>), то достаточно установить стиль:
Код
p { text-indent: 4em; }

PM MAIL WWW   Вверх
tikitiki
Дата 5.4.2008, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



bars80080, вот это очень интересно. 
Цитата(bars80080 @  4.4.2008,  21:49 Найти цитируемый пост)
а чтобы обеспечить табуляцию в начале абзацев (если формировать абзацы, скажем, тэгами <p>), то достаточно установить стиль

Только я не до конца разобрался как сами абзацы найти, т.е. начало и конец абзаца.  
Код

$about = str_replace ("\t", "&nbsp;&nbsp;&nbsp;&nbsp;", $about);

Это подходит? 


--------------------
PM   Вверх
tikitiki
Дата 5.4.2008, 06:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



К предыдущему моему сообщению.
Дело в том, что перевод строки не значит в блокноте начало или конец абзаца обязательно.


--------------------
PM   Вверх
Fortop
Дата 5.4.2008, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



tikitiki, 
У тебя есть четкий признак абзаца?
Если это табуляция или строго 4 пробела.

то можно для начала сделать вот так

Код

// меняем все 4 пробела на табуляцию
$src = str_replace(str_repeat(' ', 4), "\t", $src);
// меняем все табуляции на признак параграфа
$src = str_replace("\t", "<p>", $src);


Если признаков четких нет. Т.е. 4 пробела и табуляция могут встречаться где угодно в тексте - то никак.
Т.е. для начала тебе придется ручками править текст (например, руками прописать в начале каждого абзаца <p>)


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
ksnk
Дата 5.4.2008, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



насколько я смог понять - в тексте абзацем будет считаться перевод строки, за которым идет пробел или табуляция.
Тогда алгоритм примерно такой
Код

$str=preg_replace("/\r?\n(\S)/",'\\1',$str); // убираем "неправильные абзацы"  если не менее 2-х пробелов - "/\r?\n\s?(\S)/"
$str='<p>'.preg_replace("/\r?\n\s*/",'</p><p>',$str).'</p>'; // заменяем "правильные" на <p>



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
tikitiki
Дата 6.4.2008, 03:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



Fortop и  
ksnk, спасибо большое.

ksnk, твой код почти идеальный. Я его проверил уже. Единственное-не могу в него пробелы влепить в начало абзацев. Абзацы разбиты правильно, но не начинаются с пробелов.
Пробовал, например так:
Код

$str='  <p>'.preg_replace("/\r?\n\s*/",'</p>  <p>',$str).'</p>'; // заменяем "правильные" на <p>

Не получилось.
Если можешь, подскажи. Кроме того спасибо за пример с регулярными выражениями (меня они пока пугают ещё) .


--------------------
PM   Вверх
tikitiki
Дата 6.4.2008, 03:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



ksnk, кроме того выяснилось, что пустая строка вставляется между абзацами.
Пробовал изменить, но пока не добился правильного результата. То строки склеиваются, то
пробелов в начале по-разному получается в строках.


--------------------
PM   Вверх
ksnk
Дата 6.4.2008, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



ну да, косяк... Когда убираются "неправильные" абзацы надо бы их не выкидывать, а заменять на пробел
Код

// заменяем неправильные абзацы на пробел
$str=preg_replace("/\r?\n(\S)/",' \\1',$str); // убираем "неправильные абзацы"  

// пробелы можно вставить после <p>. Для читабельности можно вставить еще и превод строки.
$str='<p>'.preg_replace("/\r?\n\s*/","</p>/r/n<p> ",$str).'</p>'; // заменяем "правильные" на <p>
 
Зачем нужен пробел в начале параграфа? 
Можно какой-нибудь пример текста привести?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
tikitiki
Дата 7.4.2008, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



Цитата(ksnk @  6.4.2008,  13:00 Найти цитируемый пост)
Зачем нужен пробел в начале параграфа? 
Можно какой-нибудь пример текста привести? 

Это отсебятина-но мне просто так хочется красную строку сделать у абзацев, как в русском языке. Это же нормальное желание по-моему. Почему страницы должны быть забиты текстом как придётся, чтоб потом пользователь мучился. Пользователь может не догадываться о трудностях программирования и гадает куда абзацы делись у этих "тугодумов". Если ты имеешь ввиду первый абзац, то там тоже нужно ставить пробел, т.к. он далее у меня в коде не учитывался.

Цитата(ksnk @  6.4.2008,  13:00 Найти цитируемый пост)
ну да, косяк... Когда убираются "неправильные" абзацы надо бы их не выкидывать, а заменять на пробел

Пробел в начале абзацев всё-равно не получился. Есть ещё варианты?

Код

$str=preg_replace("/\r?\n(\S)/",' \\1',$str); 

Насчёт этого регулярного выражения. Очень понравилось. Но хотел чуток разобраться с ним. \r и \n -это возврат каретки и новая строка соответственно? Что означает символы \S (думаю пробел) и \\1? В другом выражении у тебя \s в другом регистре-это как понимать?


--------------------
PM   Вверх
SelenIT
Дата 7.4.2008, 02:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Цитата(tikitiki @  7.4.2008,  01:23 Найти цитируемый пост)
мне просто так хочется красную строку сделать у абзацев

Какое отношение к красной строке имеют пробелы? Чуть выше bars80080 показал, как делать красную строку правильно.

Цитата(tikitiki @  7.4.2008,  01:23 Найти цитируемый пост)
\r и \n -это возврат каретки и новая строка соответственно?

Формально да, но в виндах они задают новую строку именно парой - \r\n. В *nix-ах строки переводит только одна \n. Но раз речь о блокноте, то, видимо, используется виндовый перевод строки ;).

Цитата(tikitiki @  7.4.2008,  01:23 Найти цитируемый пост)
Что означает символы \S (думаю пробел)

С точностью до наоборот - любой непробельный символ;)

Цитата(tikitiki @  7.4.2008,  01:23 Найти цитируемый пост)
В другом выражении у тебя \s в другом регистре-это как понимать?

А вот это как раз любой пробельный символ (пробел как таковой, табуляция, перевод строки). Аналогично \d - цифра, \D - не цифра, \w - элемент слова (буква, цифра, подчеркивание), \W - не элемент слова.

Цитата(tikitiki @  7.4.2008,  01:23 Найти цитируемый пост)
и \\1?

Это то, что совпало с выражением в первой паре скобок.

Подробности - в документации.

Добавлено через 5 минут и 55 секунд
Цитата(tikitiki @  7.4.2008,  01:23 Найти цитируемый пост)
Почему страницы должны быть забиты текстом как придётся, чтоб потом пользователь мучился.

А если пользователь захочет этот текст скопировать и в Ворд вставить? Вот тогда ему придется помучиться, удаляя эти пробелы ;). На то HTML и гипертекст (а не просто текст), что красоту в нем можно наводить специальными средствами - таблицами стилей. А разгонять абзацы пробелами, а строки <br>-ками, будто на дореволюционной пишмашинке - вот это и есть "забивка текстом как придется" smile.


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1188 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.