Nasıl kaldırılır

6 Cevap

I have some articles stored in a text field in my database. There are times when the article includes <textarea>content.....</textarea> The problem is that when the content is displayed on a page using php, it includes the actual <br><br><br>. The <br> is placed there by the text editor (CKEditor) So it looks like the following

<textarea> <- Bu aslında bir textarea olur

This content is shown inside the text area<br> but the problem is that the <br> is also shown. </textarea>

Nasıl <br> sadece <textarea> etiketleri şerit olabilir. Bazı gebelik yerini yararlı olacağını düşünün.

6 Cevap

Yapabileceğiniz en iyi şey bunu yapmak için bir HTML çözümleyici kullanmak için:

$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 "düzenli ifade" anlamında "normal" değildir, çünkü temelde regexes işleme HTML için kötü bir araçtır. Bu güvenilmez bir hack kullanmadan iç içe geçmiş öğeleri gibi şeyler işlemek anlamına gelir.

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

Eğer kullanıyorsanız <br />, uygun bir şekilde güncelleyin.

Burada bir yolu

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

Eğer veritabanı depolama ne de bir göz vardı - belki veritabanına yazmadan önce HTMLencoding oluyor ve böylece ne görüyorsanız aslında:

&lt;br /&gt;

O $ _POSTing önce alanları kaçar gibi CKEditor ve TinyMCE tarafından oluşturulan alanları kullandığınızda bu olabilir

HTML verilen ...

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

... Bu Javascript gerçekleştirmek ...

document.getElementById('text').value = document.getElementById('text').value.replace(/<br>/g,'\r');

nihayet ben o kadar garip cevap buldu .. ama sorun giderilmiştir.

as i notice.. if we write line 1 line2 line3

aslında çoklu çizgi ile bir içerik yazmak ve
veya veya ne olursa olsun olmadan

bu yüzden aşağıdaki işlevi yapın


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

i textarea içeriğini kaydetmek ve değişken üzerine kaydetmek istediğiniz zaman ve onu kullanmak, Ayrıca ben kolay, örneğin ... textarea için değişkenin değerini echo biliyorsunuz

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

Yardımlarınız için çok teşekkür ederim

ve i aynı sorunla karşı karşıya insanlara umut olur