Как делают это опытные люди ? Форматирование текста, теги и т.д

Сенсей

Новичок
Как делают это опытные люди ? Форматирование текста, теги и т.д

Вот как я это делаю :

Есть движок, модуль : Статьи

При вводе новости :

Человек набирает текст в админке в textarea - жмет Добавить
и текст без всяких обработок, такой как был введен - такой и всовывается в MySQL

При выводе :

При выводе обрабатываю текст лишь через nl2br - что бы перевод строки автоматом был ...

------
Что мы имеем ....

1 - Автор пишет статью про HTML в каком либо редакторе (Ну возьмем хотя бы FrontPage) -

Например вот это код исходник который выдает редактор:

Код:
<p>Для того что бы вывести на странице HTML поле для вода пароля впишите в вашу 
  страницу код :</p>
<p>&lt;input type=&quot;password&quot; value=&quot;&quot;&gt;</p>
<p>И вы увидте не странице</p>
<p><input type="password" value=""></p>
В итоге в статье выглядит все нормально ... Сначало автор показывает КОД инпута , а потом " ИДЕТ " сам инпут ...
Есть лишь одна проблема - слишком большое расстояние от <p> до <p> так как я делаю при выводе nl2br

2 - У автора нету ни какого HTML редактора .... И он пишет туже статью прямо в textarea, естественно он пишет ее как может .... и он даже не знает что что бы текст не воспринимался как html нужно заменять спец символы на их эквиваленты (именно то что и делал в 1 ом случае сам HTML редактор )

Он ввел текст в textarea :

Код:
<p>Для того что бы вывести на странице HTML поле для вода пароля впишите в вашу 
  страницу код :</p>
<p><input type="password" value=""></p>
<p>И вы увидте не странице</p>
<p><input type="password" value=""></p>
В итоге в статье мы видим два элемента input ....

---------

Как лучше всего справляться с такой проблемой ?

Я могу при выводе сделать тексту еще и htmlspecialchars - но тогда если автор захочет вывести в статье например таблицу html - то он будет видеть лишь html код а не таблицу ...


Есть идея сделать спец тег .. например [kod][/kod]

и сделать регулярку которая бы обрабатывала текст который находится между этим тегом через htmlspecialchars Тогда встает другой вопрос - делать обработку перед вводом в базу .... сразу же удаляя спец тег ? Либо опять же чистый текст вводит в базу (ествественно тег [kod][/kod] тоже пойдет в базу) и обрабатывать при выводе ?

Не возникнет ли потом проблем при редактировании статьи ?
------

Я понимаю что много написал .... Но я ни как не могу сообразить как вобще все это вместе организовать .... автоматический перевод строки ... сец символы и обычный html , что бы все это не конфликтовало ... что бы не было проблем при редактировании ... И что бы автор - который пишет статьи - и не задумывался о всяких спецсимволах и т.д ....

Кто нить может просветить ? Или же тут один выход из 2 :

1 - Выводить чистой HTML --- тогда нужно строго соблюдать качесвтво введенного в базу кода ....

2 Либо же при выводе делать htmlspecialchars --- тогда внезависимости от соблюдения правил спецсимволов и т.д - будет виден лишь текст ...

Надеюсь ктто нить поймет мою мысль .. хотя кому это ожет показаться бредом ....
 

Фанат

oncle terrible
Команда форума
надо быть проще.
вводит человек хтмл?
делаешь ему галку в форме "не форматировать автоматически".

надо ему ввести тег?
пусть учит азы хтмл

<p>&lt;input type="password" value=""&gt;</p>
 

Сенсей

Новичок
вводит человек хтмл?
делаешь ему галку в форме "не форматировать автоматически".

надо ему ввести тег?
пусть учит азы хтмл
Тогда как я понял .... если выбрано - форматировать ... делать htmlspecialchars перед вводом в базу ?

Просто чиатал тут высказывания типа "текст" в базе должен быть чистый ...

Но если это единственно нормальный способ - придется наверное так делать ...


WYSIWYG, не надо мучать бедных админов...
Когда я захожу через оперу и вижу это - хочется убить тех кто это придумал ...
А IE ужас как тормозит ......

Спосибо за совет ....
 

Фанат

oncle terrible
Команда форума
перед вводом в базу делать ВООБЩЕ ничего не надо. вообще никогда. это раз.
второе.
логика должна хоть какая-то быть?
написано - НЕ ФОРМАТИРОВАТЬ. значит не форматировать!
в том числе - и htmlspecialchars
ты можешь объяснить - зачем?
ты же сам спросил -
а если
автор захочет вывести в статье например таблицу html
Просто чиатал тут высказывания типа "текст" в базе должен быть чистый ...
тот, кто это написал - идиот.
базе - АБСОЛЮТНО по барабану, что в ней лежит. база служит для ХРАНЕНИЯ. ты картошку чистишь, перед тем как в погреб положить для хранения?
 

Сенсей

Новичок
Что то не врубаюсь ....

Ну делаю я допустим : галку в форме "не форматировать автоматически".

Автор не отметил : что делать с данными ?

Автор отметил : что теперь делать с данными ?

--------
Не догоняю что значит втое "форматировать"
 
Я тебя понимаю прекрасно....
У меня недавно была подобная проблема, я только начинаю изучать пхп, но уже есть небольшая, рабочая "гостевуха", куда иногда заходят мои друзья....
А я, по дурости ума, не делал никакой проверки выводимого текста. Представляешь, как изменился дизайн, когда кто-то написал
PHP:
</table></table><font color=red size=7>А я поимел АДМИНА....<font>
, у меня все сообщения выводятся в таблицах...
Так, что никогда, не выводи текст без htmlspecialchars!
Лучше, или пусть админ проверяет каждое сообщения перед выводом, но это сам понимаешь.... или сделать какие-нибудь кнопочки, которые будут вводить в текст нужный код
например, Слева от поля для ввода сообщения написано...

-----------------------------
Для того, чтобы вставить
цитату с этой страницы,
выделите желаемый
отрывок и нажмите сюда.-
------------------------------

-~{}~ 06.06.04 14:25:

А если, например, кто-нить напишет
PHP:
<?
 $f = fopen( "password.php", "r" );
 while( !feof( $ f) )
      echo fgets( $f )."<br>";
 fclose( $f );
?>
Ведь ты же не запрещаешь использование HTML? Не уверен, что будет работать, но все же?

-~{}~ 06.06.04 14:44:

Фанат, Это как это перед вводом в базу ничего форматировать не надо? А если тебе нужно вывести, скажем 100 сообщений, ты каждое форматировать будешь перед выводом, а если еще и сайт посещаемый, представляешь, какая нагрузка на сервер....
IMXO, гораздо лучше один раз все отформатировать:
1. Места занимает меньше.
2. Для пользователя вообще никак не заметно, то что мы что-то делаем,т.к. одно сообщение редактируется гораздо быстрее 100.
3. Вывод осуществляется очень бысто...
 

lucas

Guest
Это как это перед вводом в базу ничего форматировать не надо?
Не просто -- "не надо".

Этого нельзя делать.
Хранить (например, в БД) необходимо информацию, а не одно из ее представлений, получаемых при проведении "форматирования".

<?
$f = fopen( "password.php", "r" );
while( !feof( $ f) )
echo fgets( $f )."<br>";
fclose( $f );
?>
Что страшного случится (кроме попорченного HTML)?
 

Сенсей

Новичок
что то я совсем уже не вьеду ...

Просто чиатал тут высказывания типа "текст" в базе должен быть чистый ...
---------------------
тот, кто это написал - идиот. базе - АБСОЛЮТНО по барабану, что в ней лежит. база служит для ХРАНЕНИЯ. ты картошку чистишь, перед тем как в погреб положить для хранения?
Фанат , может ты не понял .... под ""текст" в базе должен быть чистый ..." я имел ввиду что текст не должен подвергаться обработке ни какими htmlspecialchars, nl2br и т.д ....
 

Фанат

oncle terrible
Команда форума
Loshadka
ты влез совсем не по делу.
Научись сначала ЧИТАТЬ, а потом только лезь писать.
поясняю для студентов, плохо понимающих русский язык:
Человек набирает текст в админке
то есть, он и есть админ.
и иметь ему никого не надо.
Не уверен, что будет работать, но все же?
не уверен - не пиши.
так охота посмешищем себя выставить?
Фанат, Это как это перед вводом в базу ничего форматировать не надо?
а вот так. как я сказал. слушай ина ус наматывай.
А если тебе нужно вывести, скажем 100 сообщений, ты каждое форматировать будешь перед выводом, а если еще и сайт посещаемый,
когда у тебя будут такие проблемыв - обратишься, я тебе расскажу, что делать.
представляешь, какая нагрузка на сервер....
представляю. а ты - нет.
IMXO, гораздо лучше один раз все отформатировать:
имхо твое неправильное. от недостатка опыта и непонимания теории. сиди и слушай, что старшие говорят.
 

Three Daws

Guest
уупс! вообще-то одно преобразование вида вывод-база я бы посоветовал использовать.

дело в том, что внутрь тегов <input type="text" value="подстановка"> НЕ стоит засовывать строки, содержащие ковычки :)

А вводит ковычки - вполне правомерно для пользователя.

Т.е. перед ВЫВОДОМ подстановки в форму следует сделать преобразование вида:
PHP:
$my_form_value = correct2input( $my_string_value );

function correct2input ( $value ) {
  return str_replace('"', '&quot;', $value );
}
Но тогда, при получении данных из форму стоит сделать и обратное преобразование:

PHP:
$my_db_value = correct2input( $my_string_value );

function correct2db ( $value ) {
  return str_replace('&quot;', '"', $value );
}
а не сохранять принудительные замены " -> & quot;.
 

Фанат

oncle terrible
Команда форума
Сенсей
короче.
автоматическое форматирование - это nl2br
оно отключается, если статья - это уже готовый хтмл.
ясно?

текст в базе хранишь, как есть.
ясно?

никакой htmlspecialchars делать никуда не нужно.
это не гостевая книга, о которой толкует лошадка, поскольку других скриптов просто не знает.
ясно?

ты все просто мешаешь в кучу. от этого твои проблемы.
хочет человек вывести &lt; вместо <
это уже его проблемы.
частный случай.
не надо его смешивать с форматированием.

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

-~{}~ 06.06.04 15:38:

Three Daws
Но тогда, при получении данных из форму стоит сделать и обратное преобразование:
ошибка.
никаких обратных преоборзеваний делать не надо.
 

Сенсей

Новичок
Фанат
Спасиб , врубился ... ты единственный кто понял о чем я вообще :)

И последний вопросик ....

Буду делать выбор : форматировать текст или не форматировать ...

1 - Добавляю в базе к таблице статей еще одно поле например "BRTAG" где буду держать 0 или 1
1 - Буду форматировать при выводе в зависимости от значения BRTAG

ТО есть при создании статьи буду указывать для каждой статьи отдельно .. форматировать или нет ....
---

Это нормально ? Я имею ввиду что бы потом мне не говорили что я извращенец .... :)
 

Фанат

oncle terrible
Команда форума
это нормально.
на самом деле автоматическое форматирование - это не только нл2бр
есть много других вещей - подсветка ссылок, например.

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

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

IBSN

Новичок
Автор оригинала: Сенсей

Когда я захожу через оперу и вижу это - хочется убить тех кто это придумал ...
А IE ужас как тормозит ......

Спосибо за совет ....
ТАкое бывает если код заточен под IE, как правило если при написании WYSIWYG придерживатся W3C DOM то и в Опере и в Нетскейпе будет все работать, но опять же если пишут не кривые руки :)
 
Фанат, прошу прощения...
Я не хотел никого обижать..
Просто вопрос не правильно понял, еще раз сорри....
 

lucas

Guest
neko

Отвечу за IBSN.

Существуют визуальные редакторы HTML, написанные на JavaScript (HTMLArea, Spaw).

В них можно "набирать"! :)
 
Сверху