ColdFusion - Каков наилучший способ замены значений для форматирования абзаца? - PullRequest
2 голосов
/ 08 сентября 2011

Я использую ColdFusion 9.

Я вывожу кусок текста из базы данных, чтобы он был непосредственно на веб-странице. Я не хочу, чтобы пользователи писали HTML и все испортили. Итак, я заставляю их вставлять двойной знак "@@" для обозначения нового абзаца. Данные хранятся так:

 @@This is my first paragraph. @@This will be my second paragraph. @@This is my third.

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

 <p>This is my first paragraph.</p>
 <p>This will be my second paragraph.</p>
 <p>This is my third.</p>

Я никогда не узнаю, использовал ли пользователь какие-либо знаки @@ или нет. Если этого не произойдет, мне нужно будет обернуть весь блок в тег p.

Моя первая мысль - сделать это:

  1. Обернуть весь блок в тег p.
  2. Заменить первое вхождение @@ на "" (ничего).
  3. Заменить каждое другое вхождение @@ на </p><p>

Это правильный способ выполнения этой задачи?

Ответы [ 6 ]

4 голосов
/ 09 сентября 2011

REReplace(<em>your text</em>, "@@([^@]+)", "<p>\1</p>", "all");

должен отсортировать это!

2 голосов
/ 09 сентября 2011

Мне нравится подход Кена к разделению на '@@'.Однако я бы не стал просто начинать со второго элемента массива.Пользователи могут не осознавать, что им нужно вводить @@ перед первым абзацем, или они могут подумать, что нужно поставить его после последнегоЯ бы разделил его, а затем проверил каждый абзац, чтобы убедиться, что он не пустой.Если пользователи введут его правильно, первый будет пустым и не будет отображаться.Если они этого не сделают, нет фола.

testParagraph = '@@First graf. @@Second graf. @@Third graf.';
arPara = testParagraph.split('@@');
for( i = 1; i <= arrayLen(arPara); i++ ){ // start at 2 to avoid blank graf
  if (trim(arPara[i]) neq "") writeoutput('<p>' & arPara[i] & '</p>');
}
2 голосов
/ 09 сентября 2011

Вы можете попробовать что-то вроде этого:

testParagraph = '@@First graf. @@Second graf. @@Third graf.';
arPara = testParagraph.split('@@');
for( i = 2; i <= arrayLen(arPara); i++ ){ // start at 2 to avoid blank graf
  writeoutput('<p>' & arPara[i] & '</p>');
}
2 голосов
/ 08 сентября 2011

Если вы стремитесь избегать HTML (что не так уж плохо), и вы не хотите использовать идею Генри о текстовой области и ParagraphFormat(), я бы порекомендовал использовать @@ для представлять абзац перерыв . Там нет необходимости префикс текста с ним, потому что у них всегда будет хотя бы один абзац текста, верно? (И если они вообще ничего не вводят, вам не нужны параграфы.)

Кроме этого, да, просто заменить @@ на </p><p> или просто <p> хорошо ... если вам не нужны тексты для начала текста с ним, тогда процесс замены будет проще, потому что Вы можете пропустить шаг 2, и если вы можете использовать только <p>, не закрывая его, то вы можете пропустить и шаг 1. (Если вы пытаетесь создать XHTML, вам нужно будет использовать закрывающие теги, но тогда у вас будет более сложная задача обработки текста для каждого абзаца ...)

1 голос
/ 09 сентября 2011

Хм, почему бы не использовать TinyMCE [или что-то подобное] для текстовой области, которую пользователи должны редактировать, таким образом, редактор будет генерировать все html для вас, и пользователям не нужно будет использовать ваш @@ или вставлять html?

После этого вы все еще можете очистить ввод данных пользователем перед фиксацией в БД, только если вы беспокоитесь о гнусном HTML ....

-sean

UPDATE

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

' в соответствующем месте? Параметр разделителя listToArray эффективно удаляет ваш "@@" - http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=functions_l_21.html

0 голосов
/ 10 сентября 2011

Я думаю, что люди предлагают разные подходы к работе с данными, потому что ваш подход излишне ... ошибочен ... "не идеален".Вы задаете «вопрос х», но люди могут видеть недостаток в посылке «вопрос х», следовательно, предлагая лучшие предложения по решению кажущейся ошибочной предпосылки, которая была основой «вопроса х».Я думаю, что их подход здравый, и как новичок (судя по вопросам, которые вы задаете здесь, я имею в виду), возможно, стоит быть немного более открытыми для людей, предлагающих советы: они не делают этого без всякой причины, в конце концов!

Я согласен с людьми, предлагающими вам пересмотреть ваш подход, кстати.

Однако, чтобы ответить на ваш вопрос, сделайте следующее:

  • s =reReplace (s, "^ \ s * @@ (. *) $", "

    \ 1

    ", "ONE")
  • заменяет все вхождения @@ с

Вот и все.Здесь нет ничего сложного.

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

...