因為textarea中換行用的是 "\n"或"\r\n",(linux下輸入為'\r\n',windows下為'\n') 正常的HTML中的換行是<br />或<br>;
情況一、若將textarea的內容直接存入資料庫中,換行在資料庫中也會以"\n"或"\r\n"儲存
這種情況的解決方案:
方法一、(運用smarty模版)
1. 在php服務端
$str = str_replace("\r\n","<br />",$value);(或$str = str_replace("\r\n","<br>",$value);)
$this->data['value']=$str;
2.在模版端
{$value|replace:"<":"<"|replace:">":">"}
方法二、(運用smarty模版,這種方式在有些架構下不正確,因為這些架構會在服務端將<br>傳過去之後,經過瀏覽器解析會將'<'和'>'解析為'<'和'>')
1. 在php服務端
$str = str_replace("\r\n","<br />",$value);
$str = htmlspecialchars_decode($str);
$this->data['value']=$str;
2. 在模版端
{$value}
方法三、(沒有用smarty等模版)
1. 在php服務端
$str = str_replace("\r\n","<br />",$value);(或$str = str_replace("\r\n","<br>",$value);)
$this->data['value']=$str;
2. 在html端
<?php echo html_entity_decode($value,ENT_QUOTES);?> // 將特殊的 HTML 實體(包括< 以及>等)轉換回一般字元('<'或'>'等)
情況二、 將textarea的內容入庫前做處理,然後從庫中取值時再做一次處理.
總結:情況一和情況二隻是不同的兩種步驟,思路相同
以下這些是轉載別人的,可以做為參考、
解決方案如下:
一.表單處理
提交時使用javascript把 textarea 中的 \n 替換成<br>,這裡使用了jquery.
<Textarea name="test" rows="3" cols="20" id="test"></textarea>
<script type="text/javascript">
$("#form").submit(function(){
var descrip = $("#test").val();
descrip=descrip.replace(/\n/g,'<br />');
$("#test").val(descrip);
}
</script>
二. 服務端處理
使用的是PHP的內建函數,做了一下入庫前的處理
htmlentities(trim($postValue), ENT_QUOTES, "utf-8");
三.讀取顯示頁面
使用PHP的正則函數把讀取的<br>還原,然後輸出
<?php
$show = eregi_replace('<br>|<br />','<br>',$dataStr);
?>