如何仅在<textarea> </textarea>中删除<br/>

时间:2010-01-06 03:53:17

标签: php

我有一些文章存储在我的数据库的文本字段中。有时,文章包含<textarea>content.....</textarea> 问题是当使用php在页面上显示内容时,它包含实际的<br><br><br><br>由文本编辑器(CKEditor)放置在那里 所以它看起来像以下

  

<textarea>&lt; - 这实际上变成了textarea

     

此内容显示在文字区<br>内   但问题是<br>   也显示。   </textarea>

如何仅从<br>标记中删除<textarea>。我想一些preg替换会很有用。

6 个答案:

答案 0 :(得分:3)

最好的办法是使用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在“正则表达式”意义上不是“常规”。这意味着它不会在不使用不可靠的黑客的情况下处理嵌套元素之类的东西。

答案 1 :(得分:2)

$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 />,请正确更新。

答案 2 :(得分:0)

这是一种方式

$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);

答案 3 :(得分:0)

您是否看过数据库存储的内容 - 也许是在写入数据库之前对其进行HTML编码,所以您实际看到的是:

&lt;br /&gt;

当您使用CKEditor和TinyMCE生成的字段,因为它在$ _POSTing

之前转义字段时会发生这种情况

答案 4 :(得分:0)

最后我发现答案很奇怪..但它解决了这个问题。

正如我注意到的..如果我们写第1行 2号线 第3行

它实际上用多行写了一个内容,没有任何<或者

所以我做了以下功能


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

每当我想保存textarea的内容并将其保存在变量上时,我就会使用它,我也可以很容易地知道回复textarea变量的值...例如

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

非常感谢你的帮助

我希望它可以帮助那些面临同样问题的人

答案 5 :(得分:0)

鉴于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');