<br /> теги, появляющиеся в выводе textarea - PullRequest
1 голос
/ 13 мая 2009

У меня есть форма ввода с двумя текстовыми областями, позволяющими пользователю вводить слова, разделенные запятыми в каждой.

<form action="http://www.example.com/output.php" method="post">
<table border="0">
<tr>
<td>
<h3 class="title">Prefix</h3>
<textarea cols="34" rows="8" name="cat[]"></textarea></td>
<td>
<h3 class="title">Suffix</h3>
<textarea cols="34" rows="8" name="cat[]"></textarea></td>
</tr>
</table>

Enter words separated by a comma. 

<input type="submit" value="Go" /> </form> 

Затем он передает их в выходную форму, которая разбивает слова через запятую, а затем объединяет их вместе, пока не будут созданы все возможные перестановки слов. Затем он выводит результаты в текстовую область. Моя проблема в том, что выходные данные (хотя они правильно отформатированы и имеют разрывы строк между каждой перестановкой) имеют тег br в конце каждой строки. Например.

testtest2<br />
testtest2<br />
testtest4<br />
testetest2<br />
testetest2<br />
testetest4<br />

Форма вывода:

$cat = $_POST['cat']; //trait set for textbox inputs
foreach(array_keys($cat) as $key){
$cat[$key] = explode(",", str_replace(' ','',$cat[$key]));
}    

function showCombinations($string, $traits, $i)
{
if ($i >= count($traits))
echo trim($string)."\n";  
else
{
foreach ($traits[$i] as $trait)
showCombinations("$string$trait", $traits, $i + 1);
}
}
?>

<form name=form1 method=post action=''''>
<textarea><?php ShowCombinations('', $cat, 0); ?></textarea>
</form>
  1. Когда я удаляю теги textarea для вывода, он работает нормально.
  2. Когда я оставляю теги textarea и удаляю / заменяю обрезку эха ($ string). "\ N"; с "\ r", или "n", или "\ n \ r",
    исчезает, но я также теряю перевод строки
  3. Заменить обрезку эха ($ string). "\ N"; с эхом nl2br ($ string); тогда тот же результат, что и 2.
  4. Заменить на echo nl2br ($ string). "\ N"; тогда тот же результат, что и 1.

Буду признателен за любую помощь. Мой мозг нуб собирается взорваться.

Ответы [ 7 ]

2 голосов
/ 13 мая 2009

Я предвосхищу это, говоря, что я использую Blogger, а не Wordpress, но я думаю, что есть сходства. В Blogger есть настройка для преобразования разрывов строк в теги <br>. Я думаю, это удобно, если вы не помещаете фрагменты кода и тому подобное (если вы пишете о кошках или что-то в этом роде), но не так много для программирования. Я должен был отключить его и вставить теги абзаца и т. Д. Вручную.

Вот одно меньше идеального решения , в котором также упоминается проблема вставки в формы Wordpress <br> тегов.

1 голос
/ 25 марта 2011

Попробуйте использовать это, я уже протестировал ...

<!DOCTYPE HTML>
<html>
<head></head>
<body>
<?php 
if(isset($_POST['status'])){
$newLineCode = "<br/>";
$message = $_POST['status'] ;
$modifiedTextAreaText = ereg_replace( "\n", $newLineCode, $message);
echo " <p>Result of Code Snippet:</p> " . $modifiedTextAreaText ;
}
?>
<form action="" method="post">
<textarea name="status"></textarea>
<input type="submit"/>
</form>
</body>
</html>
1 голос
/ 13 мая 2009

Я думаю, что тег <br /> - это то, что вам нужно в этом случае. Символы новой строки, такие как \ n и \ r, ничего не делают в HTML - все пробелы, включая символы новой строки, игнорируются. Тег <br /> по сути является HTML-эквивалентом - он обозначает "break". Я не слишком много знаю о PHP, поэтому не знаю, почему он автоматически ставит <br /> для вас, но это правильный HTML для того, что вы описываете.

Технически, есть лучшие способы форматирования вывода, чем использование этих тегов, но это более сложная тема. Если вы немного новичок в этом, как вы сказали, просто покажите это так, а потом, возможно, когда-нибудь в будущем вы сможете узнать о правильной семантической разметке HTML, CSS-стилях и т. Д.

0 голосов
/ 23 декабря 2013

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

0 голосов
/ 08 августа 2009

Потребовалось некоторое внимание, но через некоторое время я смог точно определить эти два местоположения (строки 154 и 165 - WP 2.8) в файле wp-includes / formatting.php.

154     $pee .= '<p>' . trim($tinkle, "\n") . "</p>\n"; //<-- before
154     $pee .= trim($tinkle, "\n") . "\n"; //<-- after

165     $pee = preg_replace('|(?<!<br />)\s*\n|', "<br />\n", $pee); // optionally make line breaks <-- before
165     $pee = preg_replace('|(?<!<br />)\s*\n|', "\n", $pee); // optionally make line breaks <-- after

Это позаботилось о параграфе и тегах разрыва в моем поле textarea.

0 голосов
/ 13 мая 2009

Я считаю, \n должно работать. Возможно, у вас нет или неверный тип документа.

Пример: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Если все остальное, мне нравится ответ Локка. Вы могли бы нам <div>, и вы могли бы даже сделать его похожим на <textarea> (или даже лучше!)

0 голосов
/ 13 мая 2009

почему бы не отобразить результаты на <div> возможно или на <p> ??

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