Как удалить <br>в пределах <textarea></textarea> только - PullRequest
1 голос
/ 06 января 2010

У меня есть несколько статей, хранящихся в текстовом поле в моей базе данных. Бывают случаи, когда статья включает <textarea>content.....</textarea> Проблема в том, что когда контент отображается на странице с использованием php, он включает в себя фактический <br><br><br>. <br> размещается там текстовым редактором (CKEditor) Так выглядит следующее

<textarea> <- это фактически становится текстовой областью </p>

Это содержимое отображается внутри текстовой области <br> но проблема в том, что <br> также показано. </textarea>

Как я могу удалить <br> только с тегов <textarea>. Я полагаю, что некоторые замены preg были бы полезны.

Ответы [ 6 ]

3 голосов
/ 06 января 2010

Лучше всего использовать для этого HTML-парсер:

$dom = new DOMDocument;
$dom->loadHTML($content);
foreach ($dom->getElementsByTagName('textarea') as $textarea) {
  foreach ($textarea->childNodes as $child) {
    if ($child->nodeName == 'br') {
      $textarea->removeChild($child);
    }
  }
}
$content = $dom->saveHTML();

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

2 голосов
/ 06 января 2010
$x='<br><textarea>abcd<br>efgh</textarea><br><br>';

echo preg_replace('/<textarea>.*?<\/textarea>/e','str_replace("<br>","","\\0")',$x);

//<br><textarea>abcdefgh</textarea><br><br>

Если вы используете <br />, пожалуйста, обновите его соответствующим образом.

0 голосов
/ 02 сентября 2010

Учитывая HTML ...

<textarea id="text">Some text here.<br>Some other text.</textarea>

... выполнить этот Javascript ...

document.getElementById('text').value = document.getElementById('text').value.replace(/<br>/g,'\r');
0 голосов
/ 22 июня 2010

наконец я нашел ответ, это так странно .. но это решило проблему.

как я заметил .. если мы напишем строку 1 line2 line3

это на самом деле написать контент с многострочным и без
или что-то еще

поэтому я выполняю следующую функцию


function clear_string($string) { 
$string = str_replace(array('\r\n', '\r', '\n'), '
', $string); 
return $string; 
} 

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

<textarea><?php echo $notes;?> </textarea>

Большое спасибо за вашу помощь

и я надеюсь, что это поможет людям, которые сталкиваются с той же проблемой

0 голосов
/ 06 января 2010

Вы посмотрели, что хранит база данных - может быть, это HTML-кодирование перед записью в базу данных, и вот что вы видите на самом деле:

&lt;br /&gt;

Это может произойти, когда вы используете поля, сгенерированные CKEditor и TinyMCE, поскольку они экранируют поля перед $ _POSTing

0 голосов
/ 06 января 2010

вот один из способов

$str= <<<A
    <textarea> <-- this actually becomes a textarea

    This content is shown inside the text area<br> but the problem is that the <br> is also shown. </textarea>
A;
$s = explode("</textarea>",$str);
for($i=0;$i<count($s)-1;$i++){
    if(strpos($s[$i],"<textarea>")!==FALSE){
        $s[$i] = preg_replace("/<br>/","",$s[$i]);
    }
}
print implode("</textarea>",$s);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...